【发布时间】:2016-02-16 00:09:45
【问题描述】:
我有一个在多个平台上编译的项目,其中之一是 Visual C++。我注意到的是,我们经常破坏构建,因为开发人员使用了 errno 而没有包含 errno.h,但是因为它们在 Visual Studio 中工作,并且它们的源直接或间接包含 stddef.h,它并没有编译失败他们。
为什么在这个头文件中定义了errno?在我们的周期早期发现这个问题的好方法是什么? e.还在 Visual Studio 中?
【问题讨论】:
-
在你的项目中,将光标放在
errno符号上,按 F12,VS 会显示符号的定义位置。这是一个开始。 -
当 errno.h 被遗忘时,我正在尝试编译失败。
-
其他标题可以包含
<errno.,h>,这就是它起作用的原因。没有标准的跨平台方法来检查是否包含特定的标头,特别是因为其他标头可能包含该文件,因此它实际上会被包含。 -
仅供参考:在我的 VS2013 上,
errno在 stdlib.h 中定义。此外,如果使用 win32 SDK,errno 是通过 stdlib.h 或其他包含但不在其他平台上的,我认为您无能为力。 -
让一个平台编译所有其他平台都失败的代码是非常烦人的。我总是试图让它们尽可能相似,以避免代码到达 CI 服务器后的构建和修复周期。这是所有编译器都不相同的更令人震惊的情况之一。
标签: c visual-c++