GCC와 Clang 모두에서 Linux에서 완벽하게 컴파일되고 실행되는 C99의 코드베이스가 있습니다. 그러나, (MSYS2 통해 설치)는 MinGW-W64에, 그것은C99 코드가 Linux에서 컴파일되고, Windows에서 구문 오류가 발생합니다.
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));
분명하게 알 수 있듯이 같은 오류를 제공, 심지어 자체에 대한 모든 토하고없이 헤더 파일을 구문 분석 할 수 없습니다. 오류가있는 프로그램 부분은 다음과 같습니다.
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
운영 체제는 윈도우 64 (7)이다. 컴파일러는 mingw-w64-x86_64-toolchain 패키지 그룹을 설치하여 MSYS2를 통해 설치되었습니다. 컴파일은 설치시 MSYS2가 생성 한 MinGW64 셸에서 수행되었습니다 (또는 가장 많이 시도되었습니다).
와우, 나는 마이크로 소프트를 좋아한다. C에 추가 된 추가 키워드 목록은 무엇입니까? 그리고 왜 도스 가방을 들고 다니는거야? Win7은 DOS 프로그램도 실행하지 않습니다. –
저는 크로스 플랫폼 C/C++ 코드를 작성합니다. 항상 Windows에서 가장 많은 문제를 일으키고 코드를 가장 많이 사용하지 않아야합니다. –
오, 나는'거대한'이 당신이 피하고 싶을 수도있는 비슷한 시대 착오적 인 키워드일지도 모른다고 생각합니다. –