glfw 与 windows 的宏定义冲突 APIENTRY

C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\shared\minwindef.h(130): warning C4005: “APIENTRY”: 宏重定义
APIENTRY
使用GLFW库时总是遇到这个问题,编译时警告宏重定义
,遇到多次了,比较容易处理。
本质上是因为GLFW的glfw3.h
与minwindef.h
(被Windows.h
包含)中都定义了APIENTRY
宏:
GLFW:
Windows:
不同点在于,GLFW中进行了保护,如果之前已有定义,就不再处理,而windows头文件中没有处理,因此,解决这个问题,要么将Windows.h
放到glfw3.h
之前,要么在包含Windows.h
之前取消APIENTRY
的定义。
但当我把项目中所有的glfw3.h
和Windows.h
都找出来且调整了顺序之后,警告依然存在。
最后才发现,原来忘记了,我在预编译头文件中包含了Windows.h
,而在其他文件中包含预编译头时没有注意顺序,或者即使注意了顺序,也被clang-format
格式化了。
格式化
clang-format
可以把代码变得整齐有序,且拥有很强大的风格定制能力。
我只需要保证在包含头文件时,预编译头在最前面即可:(不,还是主头文件放在最前吧)
# 允许排序#include |
这样重新格式化所有代码,问题自然而然解决了。
- 本文标题:glfw 与 windows 的宏定义冲突 APIENTRY
- 创建时间:2025-06-19 18:14:00
- 本文链接:2025/06/19/note/Experience/apientry/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
显示评论