当C4129警告没有指示错误时,是否存在真实生活情况?

时间:2014-03-26 09:03:32

标签: c++ visual-c++ compiler-construction compiler-warnings

Visual C ++具有C4129 warning,其代码如下所示:

cout << "\n\Nothing to do\n\n";

这里并不是很清楚意图是什么 - 也许它应该在字符串的开头\n\n或者它应该是单个\n而第二个斜杠不应该在那里所以这段代码很难做到它的作者想要的。

这就是为什么我宁愿在代码库中将此警告更改为错误。

对于完全正确的代码发出此警告是否有任何实际情况?

2 个答案:

答案 0 :(得分:3)

实现定义 "\N"的含义,因此拒绝或接受此类程序取决于实现。这意味着在便携式符合标准的程序中,\N没有任何有效含义,它不能只是一个错误。更严格的编译器实际上可能会错误地拒绝此代码。

答案 1 :(得分:1)

这是旧版C ++(pre-C ++ 11)中未定义的行为, 现在&#34;有条件支持&#34;行为(这意味着 如果它受支持,编译器必须记录它)。唯一的 "\N"在代码中不会出错的情况就是它 实际上是针对特定的编译器扩展

我可以很容易地想象一个处理"\N"的编译器 "\n",虽然我看不出有任何理由使用此功能。 (另一方面,我也可以想象使用"\e"的编译器 对于ESC字符,以及使用此功能的代码 可移植性不是问题。)

从实施的质量来看,我会期待 除非编译器实际执行某些操作,否则会出错 定义(作为扩展名)。

相关问题