3 ms·
This is irrelevant; this is the function definition, which means the compiler knows this function takes zero arguments. It works because with the way the C ABI
by eridius 7y ago
This is irrelevant; this is the function definition, which means the compiler knows this function takes zero arguments.
It works because with the way the C ABI works on all platforms I'm aware of, extra arguments passed to the function can be completely ignored by the function with no ill effects, so the fact that _start actually invokes main with argc and argv can be ignored by main.
Which is to say, you could also write this as
int main(void) { return 0; }
and that would work equally as well.
- innocenat 7y agoNot on stdcall i.e. Win32 API.
- eridius 7y agoI've never done Windows programming but AFAICT you don't use `int main()` on Win32 anyway, you write something like int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR, int) (where WINAPI is just a macro for __stdcall) I also found a reference saying you can in fact use `int main()` if you want to, in a GUI subsystem Windows app, by using the Microsoft linker options /subsystem:windows /ENTRY:mainCRTStartup, but in that case you're not writing a stdcall function anymore. EDIT: I guess I should clarify, my previous comment was talking about cdecl functions, i.e. the default calling convention in C.