Visual C++ 有 C4129 警告,在如下代码中发出:
cout << "\n\Nothing to do\n\n";
这里并不清楚意图是什么 - 也许它应该是
\n\n
在字符串的开头,或者它应该是单个 \n
并且第二个斜杠不应该在那里,所以这段代码几乎没有达到其作者的目的想要。
这就是为什么我宁愿在我们的代码库中将此警告更改为错误。
在现实生活中是否存在针对完全正确的代码发出此警告的情况?
这是实现定义的
"\N"
的含义,因此由实现来拒绝或接受这样的程序。这意味着在符合标准的可移植程序中,\N
没有有效的含义,它只能是一个错误。更严格的编译器实际上可能会拒绝此代码并出现错误。
这是旧版本 C++(C++11 之前)中未定义的行为, 现在是“有条件支持”的行为(这意味着 如果支持,编译器必须记录它)。 唯一的 代码中
"\N"
不会出现错误的情况是
实际上针对特定的编译器扩展。
我可以很容易地想象编译器将
"\N"
视为
"\n"
,虽然我看不出有任何理由使用这个功能。
(另一方面,我也可以想象编译器使用"\e"
对于 ESC 字符,以及使用此功能的代码
可移植性不是问题。)
从实施质量的角度来看,我希望 除非编译器确实实现了某些东西,否则会出现错误 定义(作为扩展)。