现实生活中是否存在 C4129 警告并不表示错误的情况?

问题描述 投票:0回答:2

Visual C++ 有 C4129 警告,在如下代码中发出:

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

这里并不清楚意图是什么 - 也许它应该是

\n\n
在字符串的开头,或者它应该是单个
\n
并且第二个斜杠不应该在那里,所以这段代码几乎没有达到其作者的目的想要。

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

在现实生活中是否存在针对完全正确的代码发出此警告的情况?

c++ visual-c++ compiler-warnings
2个回答
3
投票

这是实现定义的

"\N"
的含义,因此由实现来拒绝或接受这样的程序。这意味着在符合标准的可移植程序中,
\N
没有有效的含义,它只能是一个错误。更严格的编译器实际上可能会拒绝此代码并出现错误。


1
投票

这是旧版本 C++(C++11 之前)中未定义的行为, 现在是“有条件支持”的行为(这意味着 如果支持,编译器必须记录它)。 唯一的 代码中

"\N"
不会出现错误的情况是 实际上针对特定的编译器扩展。

我可以很容易地想象编译器将

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

从实施质量的角度来看,我希望 除非编译器确实实现了某些东西,否则会出现错误 定义(作为扩展)。

© www.soinside.com 2019 - 2024. All rights reserved.