如何通过gcc的预处理器评估哈希值?

时间:2011-05-04 19:45:58

标签: c gcc c-preprocessor string-concatenation stringification

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

3 个答案:

答案 0 :(得分:3)

##是用于连接令牌的cpp(C预处理器)运算符,即

#if __STDIN_EXP(LONG_MAX) > 0x7fffffff

评估为

#if __LONG_MAX__ > 0x7fffffff

第一步。

答案 1 :(得分:2)

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

#if __LONG_MAX__ > 0x7fffffff

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

答案 2 :(得分:1)

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

#if __STDINT_EXP(LONG_MAX) > 0x7fffffff

变成这样:

#if __LONG_MAX__ > 0x7fffffff