Windows下用Clang加-pedantic编译GLAD的警告问题问询
GLAD编译警告问题解答
1. 启用-pedantic编译时能否避免这些警告?
可以,有两种实用方案:
- 标记为系统头目录:将GLAD的include目录通过
-isystem参数标记为系统头文件目录,Clang会自动抑制系统头文件的-pedantic相关警告,修改后的编译命令:clang++ .\src\glad.c .\main.cpp -isystem .\include\ -pedantic -Wall -Wextra - 针对性禁用警告:在包含
glad.h前添加编译指令,或者编译时单独针对该警告禁用:- 代码中添加:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wlanguage-extension-token" #include <glad/glad.h> #pragma clang diagnostic pop - 或者编译命令添加
-Wno-language-extension-token:clang++ .\src\glad.c .\main.cpp -I .\include\ -pedantic -Wall -Wextra -Wno-language-extension-token
- 代码中添加:
2. 能否强制使用标准类型代码块,避免平台特定扩展?
完全可以,通过预定义宏强制khrplatform.h使用标准<stdint.h>分支:
- 代码中预定义宏:在包含
glad.h前定义KHRONOS_STDINT_H:#define KHRONOS_STDINT_H #include <glad/glad.h> int main() {} - 编译时传参:编译命令添加
-DKHRONOS_STDINT_H宏定义:clang++ .\src\glad.c .\main.cpp -I .\include\ -pedantic -DKHRONOS_STDINT_H
两种方式都会让khrplatform.h跳过Windows特定的__intN类型分支,直接使用标准整数类型。
3. GLAD为何要使用这些非标准类型?
这并非GLAD的设计,而是Khronos官方khrplatform.h头文件的兼容策略:
早期Windows平台的老旧编译器(如旧版MSVC)尚未完全支持C99标准的<stdint.h>头文件,Khronos为了让代码能在这些环境正常编译,才提供了基于编译器内置__intN类型的 fallback 分支。如今新版MSVC、Clang等编译器都已完美支持<stdint.h>,但这段兼容代码仍被保留以维持对旧环境的支持。
内容的提问来源于stack exchange,提问作者HiddenPasta
相关产品推荐
相关产品推荐

