C++依赖标头排序
C++ Dependant header ordering
C++中有没有一种方法可以让人明显地看到,某些头必须按照所示的顺序排列,而重新排列它们会破坏程序?
例如:
// WARNING , THE TWO HEADERS BELOW MUST BE IN THIS ORDER EXACTLY.
#include <winsock2.h>
#include <windows.h>
// END WARNING.
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
这就是我现在所拥有的,但我觉得C++应该有一个将标题分组在一起的功能,比如:
#include_order <winsock2.h, windows.h>
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
这样,无论人们将来如何重新排列你的代码,只要强制执行是第一位的,代码就不会崩溃。
这对于编写预处理器来说已经足够琐碎了,但我想知道我是否可以在不编写自己的预处理器的情况下完成这项工作。
完整代码:
// WARNING , THE TWO HEADERS BELOW MUST BE IN THIS ORDER EXACTLY.
#include <winsock2.h>
#include <windows.h>
// END WARNING.
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
return 0;
}
处理该问题的标准方法:(WIN32_EAN_AND_MEAN似乎用词不当)
/* this definition must precede any includes. */
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
return 0;
}
解决这一问题的经得起未来考验的方法是,如果您使用的是visualstudio:
属性=>C/C++=>预处理器=>定义=>WIN32_EAN_AND_MEAN
它将为您的整个项目全局定义WIN32_LEAN_AND_MEAN
。如果您不使用visualstudio,请在IDE中找到允许您执行相同操作的设置。
您也可以通过使用预编译的标头来解决此问题。如果在那里定义WIN32_LEAN_AND_MEAN
,则是安全的,因为在预编译头之前不能包含任何头。
如果有人修改了预编译的头,并想知道为什么整个项目不再编译,那么我相信他们会知道该去哪里找。此外,您还可以在那里添加一条大大的评论。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- C++依赖标头排序
- makefile强制库依赖项排序
- C++std列表排序使用自定义比较器,该比较器依赖于对象实例的成员变量
- 当无法重新排序时,依赖成员初始化
- 使用循环依赖检测进行依赖排序