|
#define FUNCTION() vs. inline Function(), второе более "модно", а почему? |
|
|
|
Sep 3 2015, 08:13
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Собственно, весь вопрос в заголовке темы. Помню фразы, что в C++ роль макроопределений много меньше, чем в C. Стало быть, надо ориентироваться на inline функции? К примеру, задать бит в порту можно с одинаковым успехом обоими вариантами. Для единообразия пошел по второму: Код __forceinline void FpRq_off(void) { GPIOA->BSRR = FPRQ_H; } Но, скажем, функцию задержки, вычисляющую начальное значение счетчика в зависимости от времени, делаю комбинацией макрофункции со встроенной функцией. Код #define DELAY(VALUE, UNIT) \ DelayFourCycles(((VALUE) * UNIT * (SYSCLK / 1000000) + 3999) / 4000)
#pragma push #pragma O3 __forceinline void DelayFourCycles(uint32_t FC) { __asm { LOOP: SUBS FC, FC, #1 BNE LOOP } } #pragma pop Хочу просветления. Или уже...?
|
|
|
|
|
 |
Ответов
|
Sep 3 2015, 11:58
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (dimka76 @ Sep 3 2015, 11:25)  С инлайн фукциями проще искать ошибки. Точнее СЛОЖНЕЕ сделать ошибки. Других причин нет. Но для простейших задач все инлайновские обертки ничего, кроме кучи мусора для глаз, не дают. QUOTE (_4afc_ @ Sep 3 2015, 12:34)  В Watcom C... Ого! Кто-то, кроме меня, еще помнит и пользует Watcom? Я до сих пор массу всяких утилиток на Watcom пишу - традиция, да и под Linux сразу из под Win собираются, ибо линукс дано похерил, но иногда нужно бывает.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
ViKo #define FUNCTION() vs. inline Function() Sep 3 2015, 08:13 ViKo Еще один пример. Я не представляю, как сделать это... Sep 3 2015, 08:39 CrimsonPig Цитата(ViKo @ Sep 3 2015, 09:13) Собствен... Sep 3 2015, 09:19 ViKo Цитата(CrimsonPig @ Sep 3 2015, 12:19) Ва... Sep 3 2015, 10:31 _4afc_ В Watcom C inline не всегда инлайнились если inlin... Sep 3 2015, 09:34 Valentine Loginov Inline-функции, как было сказано, позволяют сделат... Sep 4 2015, 05:39 ViKo Цитата(Valentine Loginov @ Sep 4 2015, 08... Sep 4 2015, 07:37  zltigo QUOTE (ViKo @ Sep 4 2015, 10:37) Немного ... Sep 4 2015, 08:30   ViKo Цитата(zltigo @ Sep 4 2015, 11:30) А что,... Sep 4 2015, 08:38    zltigo QUOTE (ViKo @ Sep 4 2015, 11:38) Э-э, себ... Sep 4 2015, 09:11     CrimsonPig Цитата(zltigo @ Sep 4 2015, 10:11) Вы это... Sep 4 2015, 09:22      zltigo QUOTE (CrimsonPig @ Sep 4 2015, 12:22) Ну... Sep 4 2015, 09:44       ViKo Цитата(zltigo @ Sep 4 2015, 12:44) В вопр... Sep 4 2015, 09:50     ViKo Цитата(zltigo @ Sep 4 2015, 12:11) Функци... Sep 4 2015, 09:35      CrimsonPig Цитата(ViKo @ Sep 4 2015, 10:35) Сейчас м... Sep 4 2015, 09:51       ViKo Цитата(CrimsonPig @ Sep 4 2015, 12:51) Ну... Sep 4 2015, 09:55        CrimsonPig Цитата(ViKo @ Sep 4 2015, 10:55) Я не вол... Sep 4 2015, 10:07      zltigo QUOTE (ViKo @ Sep 4 2015, 12:35) И что, i... Sep 4 2015, 10:18       Dog Pawlowa Цитата(zltigo @ Sep 4 2015, 13:18) В идеа... Sep 6 2015, 18:46 ViKo А я проверил. Всё то же, inline функция GPIO_conf(... Sep 7 2015, 09:03 Valentine Loginov Если много аргументов - передавайте указатель на с... Sep 10 2015, 07:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|