审查下季度优化的 C++ 课程的材料。本课程的教授正在为我们的项目属性强制执行 /WALL 和 /WX。我遇到的问题是,包含 Iostream 库会产生超过 800 个警告。这是我尝试运行的代码:
#include "pch.h"
#include <iostream>
int main() {
std::cout << "Hello World";
return(0);
}
我收到的一些警告包括:
C4514 'abs': unreferenced inline function has been removed
C4774 'sprintf_s': format string in argument 3 is not a string literal
C4820 'std::basic_ios ...': '7' bytes of padding added after...
在询问 Stack 之前,我给教授发了一封电子邮件询问这些警告,并被告知:
你应该包括 iostream
如果您收到 100 条警告,则说明您包含了不需要的标头
我有什么遗漏的吗?我知道我无法编辑 iostream 的源文件,因为这不是可移植的编码。我环顾四周,看看是否可以明确包含 cout、cin 等函数。但是,我觉得这不是正确的解决方案。
Edit:
用户请求提供更明确的警告消息示例,以防其中缺少某些内容。以下是一些:
C415 'abs': referenced inline function has been removed (Project: Hello World) (File: stdlib.h)
C4710 'int sprintf_s(char *const....: function not inlined. (Project: Hello World) (File: stdio.h)
教授通过 Visual Studio 使用 GCC,我们的设置是从存储库中作为预制项目提取的。
很简单,你的教授错了。
这与“包含不需要的标头”无关(为什么会生成警告?),但与使用/WALL
, 这揭示了 stdlib 实现中的一些缺陷 https://stackoverflow.com/q/4001736/560648!
不建议使用此开关;引用詹姆斯·麦克内利斯 https://stackoverflow.com/users/151292/james-mcnellis who 得到它爆炸 https://stackoverflow.com/questions/4001736/whats-up-with-the-thousands-of-warnings-in-standard-headers-in-msvc-wall#comment8922238_4001759根据上述问题:
/Wall
启用许多警告,虽然有时可能有用,但大多数时候没有用。/Wall
在 Visual C++ 中与-Wall
在 g++ 上(实际上,g++“有/Wall
错误”,因为它实际上并没有启用所有警告)。无论如何,在 Visual C++ 中,所有通常重要且有用的警告都可以通过以下方式启用:/W4
.
我会用/W4
在 Visual Studio 中(和-Wall -Wextra
在海湾合作委员会)。
显然我无法帮助你说服你的教授这一点,除了建议你说一些类似的话“我在 Stack Overflow 上询问,发现这是由于/Wall
过于严格并在 Visual Studio 自己的标头上生成警告。他们建议我们使用/W4
反而。 。你怎么认为?”
确实,您需要#include <iostream>
,确实,您永远不应该修改提供的标准标头。另外,别忘了直播'\n'
结束你的输出行!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)