常数乘法的奇怪值

时间:2014-02-16 16:19:40

标签: c++ c-preprocessor

#include<iostream>
using namespace std;

#define P d2 + 2

int main()
{
    int d2 = 4;

    cout << P * 2;
    getchar();
    return 0;
}

为什么这段代码会返回8而不是12? 当我输出P时,它有6个值。

2 个答案:

答案 0 :(得分:3)

在编译器之前运行的C(和C ++)预处理器在使用指令#include#define时进行严格替换。换句话说,在预处理器运行之后,所有编译器都会看到

cout << d2 + 2 * 2; 

你应该试试

#define P (d2 + 2)

甚至更好地完全避免使用宏。

答案 1 :(得分:1)

你忘了牙箍。宏直接替换为代码。所以你的陈述是:

cout << d2 + 2 * 2

哪个是d2 + 4

将宏编辑为

#define P (d2 + 2)