gpt4 book ai didi

c - Linux 头文件中的函数定义中的 DECLSPEC 和 SDLCALL 是什么意思?

转载 作者:IT王子 更新时间:2023-10-29 01:00:44 25 4
gpt4 key购买 nike

我正在研究 SDL 2 头文件,发现我遇到的大多数函数都有这种形式:

extern DECLSPEC int SDLCALL SDL_FunctionName();

我理解 externintSDL_FunctionName 的含义(分别是存储类说明符、返回值和函数名称) .但是,我必须承认我以前没有见过 DECLSPECSDLCALL 之类的东西。搜索前者只会产生一个 Win32/64 API 的东西,而对后者没有任何好处。

这两件事是什么意思,它们做什么

最佳答案

这些常量定义为通过 C/C++ 编译器更改符号(函数)的导出行为。

DECLSPEC 是 C/C++ 头文件中使用的宏。它代表 __declspec(dllexport)__declspec(dllimport),具体取决于您是项目库还是消费者。参见 here了解更多详情。

  1. 在类的声明/拥有项目中,DECLSPEC 解析为__declspec(dllexport)。这告诉编译器允许从 DLL 外部访问这些函数。它还更改了编译器的默认命名行为(称为名称修饰名称修改),以允许从 DLL 外部更轻松地访问这些符号。参见 here .

  2. 在消费项目中,DECLSPEC 解析为 __declspec(dllimport)。这不是绝对必要的,但它的使用允许编译器为消耗的符号生成更有效的代码,例如在生成 thunk 时。参见 here .

SDLCALL 将是一个常量,用于声明函数的调用约定。您可以阅读更多关于 __stdcall__cdecl 等调用约定的信息。here .

这些宏用于使程序可移植到许多不同的体系结构和平台上,只需重新定义常量即可。通常,平台上使用的编译器或 SDK 全局定义了这些宏。

关于c - Linux 头文件中的函数定义中的 DECLSPEC 和 SDLCALL 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646165/

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