我正在使用Visual Studio处理一个已有的C++项目,发现几乎每个函数声明都在函数名前面加了__cdecl
,例如:void __cdecl functionName()
。然后我跳转到winnt.h
文件中查看__cdecl
的定义:
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define NTAPI __stdcall
#else
#define _cdecl
#define __cdecl
#define NTAPI
#endif
我搜索了cdecl,发现它是C和C++程序的默认调用约定,但上面的代码告诉我
__cdecl
没有扩展到任何内容。那么为什么在函数名前放置__cdecl
,因为它什么也不代表吗?还是我误解了上面的代码?
__cdecl
声明。它不是(也不能)在语言中定义,因此该宏为空。 - Konrad Rudolph#if
和它的条件了吗?如果条件为真,编译器可能会将它们作为扩展关键字。 - Some programmer dude__cdecl
作为调用约定。对于其他编译器,它可以定义为空。 - Bo Persson