Hind Forsum Hind Forsum - 2 months ago 14
C++ Question

Are c++ member functions compiled with cdecl+fastcall convention, by default?

These 2 conventions are used together in x86 compilation mode?

And for 64 bit compilation, there's no cdecl + fastcall right? Just AMD 64 ABI calling convention? If so, how to defer between stdcall and cdecl in 64 bit mode?

Answer

These 2 conventions are used together in x86 compilation mode?

No. Wherever did you get that idea from? Every calling convention is different, and any given function can only use one calling convention at a time. Not only that, but fastcall is not standardized. Different 32bit compilers implement it differently, if at all, so it can't be used for portable code. The only standard portable calling conventions in 32bit are cdecl and stdcall.

And for 64 bit compilation, there's no cdecl + fastcall right? Just AMD 64 ABI calling convention?

Yes. There is only one universal calling convention in 64bit. 32bit calling conventions used explicitly in code are ignored.

If so, how to defer between stdcall and cdecl in 64 bit mode?

You don't. Because they do not exist at al.