0

stdint.h(来自newlib)中这个块的目的是什么?

#if defined(__GNUC__) && \
  ( (__GNUC__ >= 4) || \
    ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) )
/* gcc > 3.2 implicitly defines the values we are interested */
#define __STDINT_EXP(x) __##x##__

这个宏稍后在标题中用于整数比较,但我不确定它应该如何评估。例如:

#if __STDINT_EXP(LONG_MAX) > 0x7fffffff
4

3 回答 3

3

##是连接标记的 cpp(C 预处理器)运算符,即。

#if __STDIN_EXP(LONG_MAX) > 0x7fffffff

评估为

#if __LONG_MAX__ > 0x7fffffff

在第一步。

于 2011-05-04T19:53:58.710 回答
2

运算符意味着“##连接”到 C 预处理器,因此该行相当于:

#if __LONG_MAX__ > 0x7fffffff

如果您真的想知道给定机器上发生了什么,请通过预处理器运行它并找出答案。

于 2011-05-04T19:51:28.913 回答
1

在预处理器中,##将两段文本连接成一个更大的标记。这个特殊的宏在标识符的每一边都加上下划线,所以如果你使用的是 gcc 3.2 或更高版本:

#if __STDINT_EXP(LONG_MAX) > 0x7fffffff

变成这样:

#if __LONG_MAX__ > 0x7fffffff
于 2011-05-04T19:51:12.763 回答