最讨厌C/C++宏孩儿的一集,#include顺序错乱,拼尽全力无法战胜

今天突然想看一下之前的OpenCL框架的代码,然后发现框架更新了,就去更新一下自己的项目

然后发现代码过不了编译了(
开始是一些由于框架更新导致有些struct的字段改变了,修改完了之后发现还是过不了编译,开始报诡异的语法错误 :sweat_smile:


我知道又是宏孩儿发力了,排查了半天最后发现是#include的顺序不对导致的

#include <d3d.h>
#include <dxgi.h>

这两个玩意儿间接包含 msxml.h,然后由于被放到了中间就不知道被前面哪些头文件给覆盖了
最后整理了大半天

千万不要瞎调include的顺序啊,能编译就别动!!!!

18 个赞

你说得对!

1 个赞

你也太快了,bot举办了 :enraged_face:

1 个赞

看不懂喵。后排安慰下玄虚酱。 :smiling_face_with_three_hearts:

1 个赞

是的!!!!!!

1 个赞

python也是,import顺序对执行也有影响 owo

重复/recursive import同样会炸 owo

说的就是你:pytorch owo

2 个赞

已经成为程序员的共识了(

1 个赞

python导包原理也是全运行一遍,挺逆天的(
所以才会有

if __name__ == '__main__'
3 个赞

没里面随机一个头文件有个using namespace std;就不错啦w

3 个赞

这个确实绷不住 :laughing:
导命名空间一时爽,冲突火葬场

1 个赞

不得不用pch了 :sob:

1 个赞

预编译头也挺恶心的,各有各的坑(

1 个赞

如果这样就太坏了 owo
跑去头文件编写者的仓库里面发issue告诉他这种习惯是不对的 owo

话说好像这个用的很多欸,OI甚至标配这个 owo
要用using namespace std;早就用了 owo

编译地狱 hh

1 个赞

什么时候我们Modern C++才能站起来 :melting_face:
好想使用import而不是垃圾include

C++23好像用的还不多 owo
devcpp还在用98的支持 owo

1 个赞

主要还是C++实在是太杂了,我感觉能用到C++11特性的都不多,根本推不动
更别说现在大家都用Rust了,包括我

1 个赞

是这样的,JDK1.8警告 owo

能跑就不要动,迁移API容易出问题,不如重新写

1 个赞

我也吃过大亏,用 clangformat,SortIncludes 参数打开了。代码格式化后,#include 顺序全变了

3 个赞

还格式化include顺序啊,这是真坑hhh