Visual C ++具有C4129 warning,其代码如下所示:
cout << "\n\Nothing to do\n\n";
这里并不是很清楚意图是什么 - 也许它应该在字符串的开头\n\n
或者它应该是单个\n
而第二个斜杠不应该在那里所以这段代码很难做到它的作者想要的。
这就是为什么我宁愿在代码库中将此警告更改为错误。
对于完全正确的代码发出此警告是否有任何实际情况?
答案 0 :(得分:3)
实现定义 "\N"
的含义,因此拒绝或接受此类程序取决于实现。这意味着在便携式符合标准的程序中,\N
没有任何有效含义,它不能只是一个错误。更严格的编译器实际上可能会错误地拒绝此代码。
答案 1 :(得分:1)
这是旧版C ++(pre-C ++ 11)中未定义的行为,
现在&#34;有条件支持&#34;行为(这意味着
如果它受支持,编译器必须记录它)。唯一的
"\N"
在代码中不会出错的情况就是它
实际上是针对特定的编译器扩展
我可以很容易地想象一个处理"\N"
的编译器
"\n"
,虽然我看不出有任何理由使用此功能。
(另一方面,我也可以想象使用"\e"
的编译器
对于ESC字符,以及使用此功能的代码
可移植性不是问题。)
从实施的质量来看,我会期待 除非编译器实际执行某些操作,否则会出错 定义(作为扩展名)。