Jor*_*dan 5 c++ c-preprocessor
#define N 10;
int main()
{
int x;
for (int i=0; i<N; i++)
x = i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用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
Run Code Online (Sandbox Code Playgroud)
但是当我将第7行更改为时,它编译得很好for (int i=0; i<10; i++).
为什么这样,我如何使用该#define指令来实现我想要的?
Adr*_*ish 13
删除分号 - 你会很好 - 分号包含在替换中
有时让编译器只运行预处理器很有用.使用gcc/g ++,你可以做类似的事情
gcc -E file.c > result.txt
Run Code Online (Sandbox Code Playgroud)
这将向您展示宏如何扩展(提示从文件末尾开始并进行处理)
我建议用常量替换宏:
const int N = 10;
Run Code Online (Sandbox Code Playgroud)
尽可能避免使用宏.宏没有任何范围.它们是全球文本替代品.编译器永远不会看到它们,因此如果您使用调试器,它将无法了解它们.我可能会忘记使用它们的其他原因.
| 归档时间: |
|
| 查看次数: |
7906 次 |
| 最近记录: |