Подтвердить что ты не робот

Почему ядро ​​Linux #define символ как сам?

В ядре Linux найдется строка кода, которая выглядит излишней для меня:

#define __arch_swahb32 __arch_swahb32

Какова цель такой идиомы?

4b9b3361

Ответ 1

Рассмотрим следующий код:

#ifdef foo
    foo();
#endif

Если вы хотите, чтобы фрагмент, подобный приведенному выше, вызывал функцию foo, вам нужно определить foo. Однако, если вы просто

#define foo

тогда имя функции foo будет заменено пустым токеном, а первый фрагмент будет предварительно обработан только ();. Если, однако, вы

#define foo foo

то первый фрагмент будет препроцессором до foo();, как и должно быть.

Ответ 2

Уловка, чтобы гарантировать, что #if defined(__arch_swahb32) проходит, но не заменяет. (Часто используется для реализации функций типа макроса)