#define X X在C中有什么作用

What effect does #define X X have in C?

本文关键字:什么 作用 #define      更新时间:2023-10-16

在LLVM项目中stdbool.h的源代码中,它写道:

/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool  bool
#define false false
#define true  true
#endif

在最后4行中,有来自#define X X的三行。你为什么要那样做?这有什么区别?这难道不会迫使编译器将true替换为true吗?

我能想到的唯一原因是,像这样的预处理器语句

#ifdef bool
// do some stuff or define bool
#endif

在其他c文件中,包括after将正常工作,而不是像那样试图以另一种方式重新定义bool

#define bool int

这将干扰第一定义

#define X X

具有"预处理器条件"*:的效果

#ifdef X

是"true""success"*


*更新

true、false等现在都是宏。所以像这样的代码

#if defined(true)
    ...
#else
    ...
#endif

会受到影响。