c++ - 为什么预处理器不扩展这个 C 或 C++ 宏?

标签 c++ c macros c-preprocessor

使用 gcc 4.1.0 编译时,有人能指出代码中的问题吗?

#define X 10
int main()
{
  double a = 1e-X;
  return 0;
}

我收到错误:指数没有数字。

当我用 10 替换 X 时,它工作正常。我还检查了 g++ -E 命令以查看应用了预处理器的文件,它没有用 10 替换 X。 我的印象是预处理器用替换文本替换文件中定义的每个宏,并应用任何智能。我错了吗?

我知道这是一个非常愚蠢的问题,但我很困惑,我宁愿愚蠢而不是困惑:)。

有什么意见/建议吗?

最佳答案

预处理器不是文本处理器,它在标记级别上工作。在您的代码中,在定义之后,标记 X 的每次出现都将替换为标记 10。但是,您的其余代码中没有 token X

1e-X 在语法上是无效的,不能变成一个标记,这基本上就是错误告诉你的(它说要使它成为一个有效的标记——在这种情况下是一个 float 点文字——你必须提供一个有效的指数)。

关于c++ - 为什么预处理器不扩展这个 C 或 C++ 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3003521/

相关文章:

java - 如果需要但不在范围内,枚举的值是多少?

macros - 我可以使用什么预定义宏来检测 Clang 中的目标架构?

macros - 一个关于scheme语言内存lazy eval宏的问题

带内存的 C++ 宏?

c++ - 亚马逊 Libs3 问题

c++ - 链接期间未定义的函数引用

c++ - 覆盖静态类函数的默认 SWIG 名称

c - 编译困难 : Pointers in C

谁能说为什么传递给函数时数组没有改变

c - 为什么 CTRL-D 没有用这个程序发出 EOF 信号?