Ошибка компиляции с winmain и простым кодом «Предыдущее отклонение WinMain»

#c #gcc #mingw #winmain

Вопрос:

 #include <stdio.h> 
#include <windows.h>
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return(0);
}
 

Я новичок в Си. Приведенный выше код возвращает следующую ошибку при попытке компиляции:

 main.c:3:5: error: conflicting types for 'WinMain'
 int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
     ^~~~~~~
In file included from c:mingwincludewindows.h:44:0,
                 from main.c:2:
c:mingwincludewinbase.h:1263:14: note: previous declaration of 'WinMain' was here
 int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);
 

Комментарии:

1. куда вы помещаете код выше? это выше главного?

2. У меня нет главного. Нужен ли он мне? Приведенный выше код-это весь код моего проекта. @Асафитач

3. По-прежнему возникает та же ошибка.

4. windws.h-это файл заголовка, который позволяет вам компилировать программу для Windows, согласно википедии, он автоматически включает windef.h, который определяет ПОМЕХИ. Включение windef.h вручную не устраняет ошибку.

Ответ №1:

Вы должны привести определение функции в соответствие с объявлением библиотеки. У тебя есть

 int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 

и это должно быть

 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 

Этого не хватает APIENTRY .