Frage zu Funktionsdeklarationen
-
Ich hab bisher nur für die konsole programmiert und kenne daher Konstrukte wie:
int WINAPI WinMain () nicht, wieso steht da dieses WINAPI davor, bisher sahen
Funktionen für mich so aus int main(), float foo(), char bar()
-
Schau mal in deine windef.h. Da steht:
windef.h schrieb:
#define WINAPI __stdcall
Und das ist eine Parameteraufrufkonvention bei Funktionen, meine ich. Es gibt nämlich einen Unterschied, ob die von links nach rechts oder von rechts nach links gelesen werden.
-
Bei __cdecl (C/C++ default) und __stdcall calling conventions werden die Parameter von rechts nach links übergeben. __cdecl Programme sind größer als __stdcall, weil nach jedem Funktionsaufruf einen Stack Cleanup Code eingebunden wird.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/msmod_5.asp
-
Das heißt in Windowsprogrammen sollte ich immer WINAPI reinschreiben?
Und noch etwas, wenn ich es bei meinen sonstigen Programmen nie hinschreiben musste,
ist das so, weil der Compiler es defaultmäßig ergänzt?
-
SirLant schrieb:
Das heißt in Windowsprogrammen sollte ich immer WINAPI reinschreiben?
Nein.
SirLant schrieb:
Und noch etwas, wenn ich es bei meinen sonstigen Programmen nie hinschreiben musste, ist das so, weil der Compiler es defaultmäßig ergänzt?
Genau deshalb.
-
Also bei normalen Funktionen, dann CDECL davor schreiben?
-
SirLant schrieb:
Also bei normalen Funktionen, dann CDECL davor schreiben?
Nein garnichts. "Normal" ist WINAPI - ob man'n nun hinschreibt oder nicht.