Парочка вопросов про функции

Discussion in 'LANGS.C' started by ajak, Nov 8, 2008.

  1. ajak

    ajak New Member

    Blog Posts:
    0
    Joined:
    Oct 24, 2007
    Messages:
    463
    1) Что лучше использовать - инлайн функции или макросы, никак не пойму их различая и когда какие использовать?
    2) Как передать в параметре функции название функции, чтобы при вызове этой функции, срабатывала только та название которой передали, т.е. по имени, а не делать большой кейс, выбирая какую функцию выбирать из переданного в параметре числового значения?

    Спасибо.
     
  2. varnie

    varnie New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2005
    Messages:
    1,785
    по пункту 2) почитай про указатели на ф-ции в Си. передавай в ф-цию указатель на ф-цию и вызывай ее далее через этот указатель.
     
  3. sieq

    sieq New Member

    Blog Posts:
    0
    Joined:
    Nov 6, 2008
    Messages:
    1
    1) http://alenacpp.blogspot.com/2005/01/blog-post_28.html
     
  4. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    разница большая - макросы обработывает препроцессор, инлайн функции компилятор. Использование инлайн ф-ции предпочтительнее, но иногда стоит использовать макросы. Еще, не факт, что функция, объявленная как что инлайн в действительности "вставится" в код - если компилятор сочтет это нужным, он проигнорирует "inline".

    че то ты намудрил, надо передавать указатель (!) на функцию, по имени ты ее не вызовешь
    Code (Text):
    1. int foo(int (*bar)(void))
    2. {
    3.     return bar();
    4. }
    никаких кейсов не надо
     
  5. cresta

    cresta Active Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2004
    Messages:
    2,257
    forceinline
     
  6. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    я бы не советовал, ибо не в стандарте, а следовательно никто не обязан это поддерживать (вроде "forceinline" переваривает только MSVC, но могу ошибаться). Хотя, если пишешь под конкретный компилятор, то можно.
     
  7. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    _forceline тоже далеко не всегда сработает. А вообще inline лучше, зачем например встраивать код, когда затраты на вызов функции во много раз меньше чем затраты на выполнение этого кода. Это наоборот может привести к падению производительности. Так что лучше предоставить этот вопрос компилятору.
     
  8. only

    only New Member

    Blog Posts:
    0
    Joined:
    Oct 21, 2008
    Messages:
    147
    Пример пожалуйста.
     
  9. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    only
    Инлайн больших участков кода в множестве мест может плохо отразиться на размере программы и как следствие на работе с кешем. Меру надо знать во всём, в том числе и с этим.
     
  10. only

    only New Member

    Blog Posts:
    0
    Joined:
    Oct 21, 2008
    Messages:
    147
    Оптимизация по скорости и размеру разные вещи вроде как.
    Это как? Не совсем понял.
     
  11. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    only
    Инлайн подразумевает оптимизацию по скорости. Процессорный кэш ограничен по размеру, и если например требовательный к быстродействию цикл в него не помещается..., а ведь ещё есть обращение к системным библиотекам. Да и даже если кеш большой, то всё равно первое обращение к незакешрованному коду гораздо медленнее.
     
  12. only

    only New Member

    Blog Posts:
    0
    Joined:
    Oct 21, 2008
    Messages:
    147
    Это понятно
    Хочется увидеть пример того, когда код без передачи управления (инлайн) медленнее кода с передачей управления (отдельная функция и передача управления ей).
     
  13. Clear_Energy

    Clear_Energy Алексей

    Blog Posts:
    0
    Joined:
    Nov 3, 2008
    Messages:
    375
    Почитай книгу Криса К. "Подсистема оперативной памяти" или что-то типа того...
     
  14. only

    only New Member

    Blog Posts:
    0
    Joined:
    Oct 21, 2008
    Messages:
    147
    Booster
    Разговоры про аппаратуру, архитектуру это конечно хорошо.
    То что Вы говорите, возможно подтвердить кодом?
    Clear_Energy
    А Вам, советую чаще или просто читать документацию.
     
  15. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    only
    Зачем пример? :)
     
  16. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    only
    агнер фог для тебя авторитет?
    тогда поверь бустеру
     
  17. W4FhLF

    W4FhLF New Member

    Blog Posts:
    0
    Joined:
    Dec 3, 2006
    Messages:
    1,050
    А я бы тоже хотел пример увидеть. :) Не потому, что не верю, а просто интересно.
     
  18. only

    only New Member

    Blog Posts:
    0
    Joined:
    Oct 21, 2008
    Messages:
    147
    Все ясно
    Авторитеты все на зоне.

    Просто хотелось увидеть подтверждение.
    Ну да ладно.
     
  19. meduza

    meduza New Member

    Blog Posts:
    0
    Joined:
    Aug 15, 2008
    Messages:
    212
    only, W4FhLF
    вы хотите увидеть пример на Си, но забываете, что он понятия не имеет, что такое кеш и все такое. Один и тот же код на Си будет вести себя по разному, скомпилированный под разные процессоры и даже разными компиляторами.
     
  20. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    inline foo1)(){};
    ...
    inline foo1000000(){};

    main(){

    ...

    M:
    push offset M

    dec ecx
    jz foo1

    ....

    dec ecx
    jz foo1000000