5
#define N 10;

int main()
{
    int x;

    for (int i=0; i<N; i++)
        x = i;

    return 0;
}

在 g++ 中编译的结果:

test-define.cpp: In function ‘int main()’:
test-define.cpp:7:22: error: expected primary-expression before ‘;’ token
test-define.cpp:7:22: error: expected ‘)’ before ‘;’ token
test-define.cpp:7:24: error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive]
test-define.cpp:7:24: note: (if you use ‘-fpermissive’ G++ will accept your code)
test-define.cpp:7:27: error: expected ‘;’ before ‘)’ token

但是当我将第 7 行更改为for (int i=0; i<10; i++).

为什么会这样,我如何使用该#define指令来完成我想要的?

4

2 回答 2

14

删除分号 - 你会很好 - 分号包含在替换中

有时让编译器只运行预处理器很有用。使用 gcc/g++ 你可以做类似的事情

gcc -E file.c > result.txt

这将向您展示宏如何扩展(提示从文件末尾开始并进行处理)

于 2012-09-08T01:40:58.750 回答
7

我建议用常量替换宏:

const int N = 10;

最好尽可能避免使用宏。宏没有任何作用域。它们是全局文本替换。编译器永远不会看到它们,因此如果您使用调试器,它不会知道它们。我忘记了可能还有其他不使用它们的原因。

于 2012-09-08T01:53:43.717 回答