为什么Linux内核#define是一个符号呢?

Ilj*_*Bek 13 c linux-kernel

在Linux内核中,可以找到一行看起来多余的代码:

#define __arch_swahb32 __arch_swahb32
Run Code Online (Sandbox Code Playgroud)

像这样的成语的目的是什么?

Nom*_*mal 15

请考虑以下代码:

#ifdef foo
    foo();
#endif
Run Code Online (Sandbox Code Playgroud)

如果你想要一个像上面那样的代码片段来调用函数foo,你需要定义foo.但是,如果你只是

#define foo
Run Code Online (Sandbox Code Playgroud)

然后函数foo名称将替换为空标记,并将第一个片段预处理为just ();.但是,如果你

#define foo foo
Run Code Online (Sandbox Code Playgroud)

然后第一个片段将按预期进行预处理foo();.


Moh*_*ain 6

诀窍确保#if defined(__arch_swahb32)通过但不替换.(通常用于实现宏类型函数)