#define X X在C中有什么作用
What effect does #define X X have in C?
在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
会受到影响。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用