Почему ядро Linux #define символ как сам? В ядре Linux найдется строка кода, которая выглядит излишней для меня: #define __arch_swahb32 __arch_swahb32 Какова цель такой идиомы? Ответ 1 Рассмотрим следующий код: #ifdef foo foo(); #endif Если вы хотите, чтобы фрагмент, подобный приведенному выше, вызывал функцию foo, вам нужно определить foo. Однако, если вы просто #define foo тогда имя функции foo будет заменено пустым токеном, а первый фрагмент будет предварительно обработан только ();. Если, однако, вы #define foo foo то первый фрагмент будет препроцессором до foo();, как и должно быть. Ответ 2 Уловка, чтобы гарантировать, что #if defined(__arch_swahb32) проходит, но не заменяет. (Часто используется для реализации функций типа макроса)
Ответ 1 Рассмотрим следующий код: #ifdef foo foo(); #endif Если вы хотите, чтобы фрагмент, подобный приведенному выше, вызывал функцию foo, вам нужно определить foo. Однако, если вы просто #define foo тогда имя функции foo будет заменено пустым токеном, а первый фрагмент будет предварительно обработан только ();. Если, однако, вы #define foo foo то первый фрагмент будет препроцессором до foo();, как и должно быть.
Ответ 2 Уловка, чтобы гарантировать, что #if defined(__arch_swahb32) проходит, но не заменяет. (Часто используется для реализации функций типа макроса)