gpt4 book ai didi

c++ - 我的 C++ 代码中的 "#define __cdecl"是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:57 24 4
gpt4 key购买 nike

我正在使用 visual studio 处理现有的 c++ 项目,我发现几乎每个函数声明在函数名称前面都有一个 __cdecl,例如:void __cdecl functionName ()。然后我跳转到 __cdecl 的定义,它位于 winnt.h 文件中:

#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define NTAPI __stdcall
#else
#define _cdecl
#define __cdecl
#define NTAPI
#endif

我搜索了 cdecl并知道它是 C 和 C++ 程序的默认调用约定,但上面的代码告诉我 __cdecl 没有扩展。那么为什么要在函数名之前放置一个 __cdecl 因为它什么都不是?还是我误解了上面的代码?

最佳答案

what's the meaning of #define __cdecl”

# 开头的行是预处理器指令。 #define 是定义预处理器宏的指令。 #define __cdecl 定义了一个带有标识符 __cdecl 和空替换的宏。如果定义了这样的宏,处理器将用空字符串替换 __cdecl 的所有实例。

So why place a __cdecl before function name as it's just nothing ?

查看相关定义开头的指令:

#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#else

宏是有条件地定义的。当宏未定义时,__cdecl 不会展开为空。当没有展开时,__cdecl 是您发现的 Microsoft 特定函数说明符。

条件定义的宏允许人们在允许它的系统上编写使用 __cdecl 的代码,并在不允许的系统上自动删除它。

But I'm still confused with the #if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) line, what does it mean?

这是一个预处理器指令,用于测试宏 _MSC_VER 的值是否大于 800,或者是否定义了宏 _STDCALL_SUPPORTED。如果测试为假,则删除#if 和#else 之间的代码。如果为真,则删除#else 和#endif 之间的代码。

关于c++ - 我的 C++ 代码中的 "#define __cdecl"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com