2013-12-19 3 views
5

Я прохожу через код ядра Linux. Я нашел макрос, определенный как #define __async_inline __always_inline. Я искал __always_inline, нашел следующее заявление #define __always_inline inline. Мой вопрос, почему они должны так поступать? Они могут напрямую использовать inline вместо этого макроса?Зачем определять макрос, который можно использовать напрямую? (Пожалуйста, см. Описание того, что именно я хочу)

+0

Возможно, в будущем они могут добавить больше функциональности/свойства в макрос, а также иногда для проблем с переносимостью. –

+0

, очевидно, 'inline' является стандартным только из версии языка C99', я предполагаю, что они сделали это, чтобы избежать жесткого кодирования ключевого слова внутри кодовой базы. – user2485710

ответ

5

Это распространенный способ параметризации кода, чтобы переместить какое-либо решение (в данном случае, использование inline) в одно место, чтобы это решение изменилось (по какой-либо причине: разные компиляторы, разные параметры конфигурации, разные архитектуры), есть только одно место для изменения.

7

Код говорит следующее:

#ifdef CONFIG_HAS_DMA 
#define __async_inline 
#else 
#define __async_inline __always_inline 
#endif 

Он самостоятельно объяснить. __async_inline будет заменен на inline, если CONFIG_HAS_DMA не определен.

+0

, но в моем случае нет таких условий – Chinna

+0

@Chinna, где вы нашли это определение? http://lxr.free-electrons.com/ident?v=2.6.32;i=__async_inline –

Смежные вопросы