c - 预处理器宏如何工作?

标签 c macros c-preprocessor

#define B 100+B
main()
{
    int i= B;
}

我知道这是错误的,但出于好奇,当我编译它时,我得到了这个奇怪的错误:

"B was not declared in this scope".

为什么会这样?如果此错误是因为编译器在替换后删除了宏,那么当 B 必须在 A 可用之前被删除时,以下代码如何正常工作?

#define B 100
#define A 100+B
main()
{
    int i= B;
    int j =A;
}

最佳答案

这是预处理器的输出:

gcc -E x.c
# 1 "x.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "x.c"

main()
{
    int i= 100+B;
}

如您所见,它进行了替换。现在是编译步骤,它失败了,因为没有声明 B

其他代码没问题,这是输出:

main()
{
    int i= 100;
    int j =100+100;
}

关于c - 预处理器宏如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11818805/

相关文章:

c++ - 使用宏时错误枚举没有成员

c++ - 如何在 MSVC 中创建 WT 项目?

c - 如何释放结构数组中的指针?

c++ - 将 5x5 矩阵减少到 c 中的 25 元素数组

c - C语言中的逆序词

c++ - 应用一些基本宏来简化大型项目中的代码是个好主意吗?

c - http 服务器响应(套接字)的 header 和内容之间存在差异

c - 为什么 "do ... while (0)"不能用简单的大括号代替?

c - 指向函数宏的函数指针

c - 数组宏定义