c ++是一种无空间语言吗?

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)

由于+显而易见的原因,两个符号之间的空格是强制性的.

  • 是的,`>>`问题确实是在C++ 0x中解决的. (2认同)

Nul*_*Set 6

宏函数名和从括号列表开始的括号之间不能有空格.

#define PR(A, B) cout << ( A ) << ( B ) << endl
Run Code Online (Sandbox Code Playgroud)

换行符形式的空格也很重要,因为#define语句在预处理器到达换行符时结束.

请注意,将分号放在宏函数定义的末尾通常是一个坏主意,这使得它们在下面没有分号的情况下使用时看起来很混乱.