这样的定义是什么意思“#define __arch_swab32 __arch_swab32”?

时间:2017-08-24 09:12:05

标签: c linux

在/usr/include/asm/swab.h中我找到了以下代码:

static __inline__  __u32 __arch_swab32(__u32 val)
{
    __asm__("bswapl %0" : "=r" (val) : "0" (val));
    return val;
}
#define __arch_swab32 __arch_swab32

最后一行的含义是什么,将名称定义为自身?

1 个答案:

答案 0 :(得分:8)

这称为self-referentitial macro

  

自引用的一个常见且有用的用途是创建一个扩展到自身的宏。如果你写

 #define EPERM EPERM
     

然后宏EPERM扩展为EPERM。实际上,只要它在运行文本中使用,它就会被预处理器单独留下。您可以告诉它它是#ifdef的宏。如果要使用enum定义数字常量,但每个常量的#ifdef为真,则可以执行此操作。