【发布时间】:2015-01-19 03:00:57
【问题描述】:
系统头文件中的条件编译(如<sys/types.h>)如何控制编译过程的问题让我困惑了很久
例如,这是<sys/types.h> 中一个常见的 typedef 代码片段:
# if __WORDSIZE == 64
typedef long int int64_t;
# elif __GLIBC_HAVE_LONG_LONG
__extension__ typedef long long int int64_t;
# endif
# endif
也就是说,如果__WORDSIZE == 64,那么我们将类型int64_t定义为long int的一个别名,但我想知道在哪里可以找到__WORDSIZE的定义。
-
__WORDSIZE的宏是否已在某个文件中静态定义?如果 那么,这个文件是如何生成的呢? - 或者,我们将预处理器宏传递给编译器?
- 或者,编译器知道它运行在什么样的机器上?但它是怎么知道的呢?
毕竟要怎么写一个头文件才能达到下面的意图:
#if the machine is 64-bit
typedef unsigned long int KEY_TYPE
#elif the machine is 32-bit
typedef unsigned long long int KEY_TYPE
#endif
【问题讨论】:
标签: c++ linux architecture conditional-compilation