У меня есть кодовая база на C99, которая отлично компилируется и работает на Linux с GCC и Clang; Однако, на MinGW-w64 (устанавливается через MSYS2), он дает ошибки, как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
Операционная система используется Windows 7 x64. Компилятор был установлен через MSYS2, установив группу пакетов mingw-w64-x86_64-toolchain. Компиляция была выполнена (или, по крайней мере, пыталась) на оболочке MinGW64, созданной MSYS2 при установке.
Ничего себе, я люблю Microsoft. Любой список дополнительных ключевых слов, которые они добавили в C? И почему он носит DOS-багаж? Win7 даже не запускает DOS-программы –
Я чувствую вашу боль - я пишу кросс-платформенный код C/C++, и всегда создаются сборки Windows, которые вызывают большинство проблем и требуют самого «ошарашения» кода. –
О, и я думаю, что «огромный» может также быть похожим анахроническим ключевым словом, которое вы, возможно, захотите избежать. –