C99代码在Linux上编译,Windows上的语法错误

我有一个C99中的代码库,可以在GCC和Clang上编译和运行在Linux上; 但是,在MinGW-w64(通过MSYS2安装),它会给出类似的错误

include/math3d.h: In function 'matPerspective': include/math3d.h:577:1: error: parameter name omitted matPerspective (float y_fov, float aspect, float near, float far) ^~~~~~~~~~~~~~ include/math3d.h:577:1: error: parameter name omitted include/math3d.h:595:28: error: expected expression before ')' token m.elem[10] = -((far + near) / (far - near)); ^ include/math3d.h:600:34: error: expected expression before ')' token m.elem[14] = -((2.0 * far * near) / (far - near)); 

显而易见的是,它甚至无法parsing头文件,而不会自己呕吐。 有错误的程序部分是:

 static inline Matrix matPerspective (float y_fov, float aspect, float near, float far) { float a = 1.0/tan(y_fov/2.0); Matrix m; m.elem[0] = a / aspect; m.elem[1] = 0.0; m.elem[2] = 0.0; m.elem[3] = 0.0; m.elem[4] = 0.0; m.elem[5] = a; m.elem[6] = 0.0; m.elem[7] = 0.0; m.elem[8] = 0.0; m.elem[9] = 0.0; m.elem[10] = -((far + near) / (far - near)); m.elem[11] = -1.0; m.elem[12] = 0.0; m.elem[13] = 0.0; m.elem[14] = -((2.0 * far * near) / (far - near)); m.elem[15] = 0.0; return m; } 

我一直在Linux上使用这个相同的代码一个多月,一切正常。

用于编译的命令是:

 gcc -c -o obj/win/x86_64/code.o src/code.c -Iinclude -std=c99 

使用的操作系统是Window 7 x64。 编译器通过安装软件包组mingw-w64-x86_64-toolchain通过MSYS2安装。 编译完成(或至less尝试)在安装MSYS2创build的MinGW64 shell。

看起来问题在于使用far参数名称 – 这些关键字在编译分段(16位)体系结构的代码时,曾经对硬壳旧x86编译器有特殊的含义 – 尝试将这些参数的名称更改为例如far_valnear_val

由OP添加 :问题是, GLAD加载器包含WinDef.h定义

 #define far 

 #define near 

基本上搞乱了语法。