2 c++ macros whitespace c-preprocessor
#define PR ( A, B ) cout << ( A ) << ( B ) << endl ;
Run Code Online (Sandbox Code Playgroud)
- 错误 - > A未在范围内声明
- 错误 - > B未在范围内声明
- 错误 - >预期","在"cout"之前
我认为C++是无空间语言但是当我在上面编写代码时,我看到了一些错误.我仍然在想"我的控制台是不是正常工作还是库?".
如果我没有错,怎么会有人说"C++是一种无空间语言"?
Oli*_*rth 10
空白很重要的例外情况很多; 这是其中之一.随着后面的空间PR,预处理器如何知道是否(A,B)是宏扩展或其参数的一部分?它没有,只是假设无论它在哪里看到PR它都应该替代( A, B ) cout << ( A ) << ( B ) << endl ;.
空白重要的另一个地方是嵌套模板参数,例如:
std::vector<std::vector<int> >
Run Code Online (Sandbox Code Playgroud)
最终空间是强制性的,否则编译器会认为它是>>运算符.(虽然我相信这是在C++ 0x中整理出来的).
又一个例子是:
a + +b;
Run Code Online (Sandbox Code Playgroud)
由于+显而易见的原因,两个符号之间的空格是强制性的.
宏函数名和从括号列表开始的括号之间不能有空格.
#define PR(A, B) cout << ( A ) << ( B ) << endl
Run Code Online (Sandbox Code Playgroud)
换行符形式的空格也很重要,因为#define语句在预处理器到达换行符时结束.
请注意,将分号放在宏函数定义的末尾通常是一个坏主意,这使得它们在下面没有分号的情况下使用时看起来很混乱.