MSVS 2015将errno放入STDEF.h? 我有一个项目,是在多个平台上编译的,其中一个是Visual C++。我注意到,我们经常破坏构建,因为开发人员使用errno时没有包含errno.h,但是因为他们在Visual Studio中工作,并且他们的源代码直接或间接包含stddef.h,所以它并没有为他们编译失败

MSVS 2015将errno放入STDEF.h? 我有一个项目,是在多个平台上编译的,其中一个是Visual C++。我注意到,我们经常破坏构建,因为开发人员使用errno时没有包含errno.h,但是因为他们在Visual Studio中工作,并且他们的源代码直接或间接包含stddef.h,所以它并没有为他们编译失败,c,visual-c++,C,Visual C++,为什么在此标题中定义了errno?在我们生命周期的早期,什么是解决这个问题的好方法。E还在VisualStudio里面吗 在我们生命周期的早期,什么是解决这个问题的好方法。E还在VisualStudio里面吗 除非您在两个不同的平台上同时开发,否则很难(如果不是不可能的话)发现这样的问题 您可以在VS project中的所有文件中搜索字符串“errno”,然后检查搜索是否也会找到“errno.h”,但这仅适用于此特定问题。标准库中有许多其他函数/宏,您可能会间接看到这些函数/宏。对于所有函数/宏

为什么在此标题中定义了errno?在我们生命周期的早期,什么是解决这个问题的好方法。E还在VisualStudio里面吗

在我们生命周期的早期,什么是解决这个问题的好方法。E还在VisualStudio里面吗

除非您在两个不同的平台上同时开发,否则很难(如果不是不可能的话)发现这样的问题

您可以在VS project中的所有文件中搜索字符串“errno”,然后检查搜索是否也会找到“errno.h”,但这仅适用于此特定问题。标准库中有许多其他函数/宏,您可能会间接看到这些函数/宏。对于所有函数/宏,使用相同的策略来确保正确的头文件是
#include
d是不切实际的


训练有素的开发人员和/或代码同行评审可能是解决此问题的最佳选择。

在项目中,将光标放在
errno
符号上,按F12,VS将显示符号的定义位置。这是一个开始。我正在尝试获取当errno.h被忘记时的编译失败。其他头可以包括
,这就是它工作的原因。没有标准的跨平台方法来检查是否包含了特定的头文件,特别是因为其他头文件可能包含该文件,所以实际上会包含该文件。仅供参考:在我的VS2013上,stdlib.h中定义了
errno
。此外,如果使用win32 SDK,errno是通过stdlib.h或其他任何方式包含的,但不是在另一个平台上,我认为您对此无能为力。让一个平台编译代码而其他平台编译代码都失败是非常烦人的。我总是尽可能地保持它们的相似性,以避免代码到达CI服务器后的构建和修复周期。这是一个更令人震惊的例子,所有的编译器都不一样。我想你可能是对的。我希望这种情况在编译时就已经发生,但另一种解决方案是使用单独的测试来扫描文件中的errno字符串并检查它们是否包含errno.h。如果开发人员在提交之前运行测试,这是他们应该做的(我们还没有通过提交规则强制执行),那么这应该可以保存他们。代码审查发生在我们的流程的后面(在代码通过CI服务器之后,并且bug已经花费了开发人员的时间),所以这是行不通的。