Есть множество исключений, когда пробел имеет значение; Это одна из них. С пробелом после PR
как препроцессор должен знать, является ли (A,B)
частью макроса или его аргументами? Это не так, и просто предполагает, что везде, где он видит PR
, он должен заменить ( A, B ) cout << ( A ) << ( B ) << endl ;
.
Еще одно место, где пробельные символы имеют значение, - это вложенные аргументы шаблона, например ::100100
std::vector<std::vector<int> >
Этот последний пробел является обязательным, в противном случае компилятор предполагает, что это оператор >>
. (Хотя я считаю, что это решено в C ++ 0x).
Еще один пример:
a + +b;
Пробел между двумя символами +
является обязательным по очевидным причинам.