如何使用GNU C预处理器预定义的宏?

时间:2017-07-04 03:09:26

标签: c gcc macros cygwin

我试图弄清楚各种头文件中的整数类型定义是如何相互关联的。

我刚刚安装了CygWin。我打开了Cygwin\x86\usr\include\machine\_default_types.h。在其中我注意到下面的代码片段:

#ifdef __INT8_TYPE__
typedef __INT8_TYPE__ __int8_t;

根据here__INT8_TYPE__是预定义的预处理器宏之一。和

  

您不应该直接使用这些宏;相反,包括   适当的标头并使用typedef。其中一些宏可能不会   如果GCC不提供stdint.h,则在特定系统上定义   这些系统上的标题。

所以似乎应该在其他地方定义__INT8_TYPE__。但我搜索了整个CygWin安装,没有定义。我发现的只是一些有条件的陈述,就像上面的那样。

因为我不应该直接使用它。并没有其他文件定义它。这个宏怎么能开始行动?或者我误解了什么?

1 个答案:

答案 0 :(得分:5)

这是预定义的宏。要查看它们,您可以:

gcc -dM -E - < /dev/null

e.g:

$ gcc -dM -E  - < /dev/null | grep __INT
#define __INTMAX_C(c) c ## L
#define __INT8_C(c) c
#define __INT64_C(c) c ## L
#define __INT32_MAX__ 0x7fffffff
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
#define __INT_FAST16_TYPE__ long int
#define __INT_LEAST32_MAX__ 0x7fffffff
#define __INT_FAST64_TYPE__ long int
#define __INT32_C(c) c
#define __INT_FAST32_TYPE__ long int
#define __INT16_MAX__ 0x7fff
#define __INT8_TYPE__ signed char
#define __INT_LEAST16_TYPE__ short int
#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
#define __INT_LEAST16_MAX__ 0x7fff
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __INT_LEAST64_TYPE__ long int
#define __INT16_TYPE__ short int
#define __INT_LEAST8_TYPE__ signed char
#define __INT_FAST8_MAX__ 0x7f
#define __INTPTR_MAX__ 0x7fffffffffffffffL
#define __INTPTR_TYPE__ long int
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
#define __INT_MAX__ 0x7fffffff
#define __INT64_TYPE__ long int
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
#define __INT_LEAST8_MAX__ 0x7f
#define __INT_LEAST32_TYPE__ int
#define __INT_FAST8_TYPE__ signed char
#define __INTMAX_MAX__ 0x7fffffffffffffffL
#define __INT8_MAX__ 0x7f
#define __INT32_TYPE__ int
#define __INTMAX_TYPE__ long int
#define __INT16_C(c) c