在/usr/include/asm/swab.h中我find了下面的代码:
static __inline__ __u32 __arch_swab32(__u32 val) { __asm__("bswapl %0" : "=r" (val) : "0" (val)); return val; } #define __arch_swab32 __arch_swab32
最后一行的意思是什么,定义一个名字本身?
这就是所谓的自我多元宏观 :
自我引用的一个常见,有用的用法是创建一个扩展到自身的宏。 如果你写
#define EPERM EPERM
然后宏
EPERM
扩展到EPERM
。 实际上,只要预处理器在运行文本中使用,它就会被单独处理。 你可以通过#ifdef
来判断它是一个宏。 如果你想用enum
定义数字常量,你可以这样做,但是每个常量的#ifdef
都是true。