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

Тема в разделе "LANGS.C", создана пользователем ajak, 8 ноя 2008.

  1. ajak

    ajak New Member

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

    Спасибо.
     
  2. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    по пункту 2) почитай про указатели на ф-ции в Си. передавай в ф-цию указатель на ф-цию и вызывай ее далее через этот указатель.
     
  3. sieq

    sieq New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2008
    Сообщения:
    1
    1) http://alenacpp.blogspot.com/2005/01/blog-post_28.html
     
  4. meduza

    meduza New Member

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

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

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    forceinline
     
  6. meduza

    meduza New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _forceline тоже далеко не всегда сработает. А вообще inline лучше, зачем например встраивать код, когда затраты на вызов функции во много раз меньше чем затраты на выполнение этого кода. Это наоборот может привести к падению производительности. Так что лучше предоставить этот вопрос компилятору.
     
  8. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Пример пожалуйста.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    only
    Инлайн больших участков кода в множестве мест может плохо отразиться на размере программы и как следствие на работе с кешем. Меру надо знать во всём, в том числе и с этим.
     
  10. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Оптимизация по скорости и размеру разные вещи вроде как.
    Это как? Не совсем понял.
     
  11. Booster

    Booster New Member

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

    only New Member

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

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Почитай книгу Криса К. "Подсистема оперативной памяти" или что-то типа того...
     
  14. only

    only New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    only
    Зачем пример? :)
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    only
    агнер фог для тебя авторитет?
    тогда поверь бустеру
     
  17. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    А я бы тоже хотел пример увидеть. :) Не потому, что не верю, а просто интересно.
     
  18. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Все ясно
    Авторитеты все на зоне.

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

    meduza New Member

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

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    inline foo1)(){};
    ...
    inline foo1000000(){};

    main(){

    ...

    M:
    push offset M

    dec ecx
    jz foo1

    ....

    dec ecx
    jz foo1000000