gpt4 book ai didi

c - 函数声明的含义

转载 作者:太空狗 更新时间:2023-10-29 17:07:56 25 4
gpt4 key购买 nike

我一直在阅读 stdio.h 文件,但我很困惑。

例如有这样一行:

_CRTIMP FILE* __cdecl __MINGW_NOTHROW fopen (const char*, const char*);

我知道 FILE* 表示返回类型,我发现 _CRTIMP 是常量,定义为

# ifndef _CRTIMP
# define _CRTIMP __declspec(dllimport)
# endif

我不明白,这是干什么的?其余的字符串 (__cdecl, __MINGW_NOTHROW) 是什么?

最佳答案

__declspec(dllimport) 指定函数要从单独的dll导入;我想,根据 CRT 静态/动态链接设置,它以不同的方式定义。

__cdecl 是函数使用的调用约定;调用约定告诉编译器期望如何调用函数(参数压入堆栈的顺序,是否有任何寄存器用于参数,存储返回值的位置,谁负责堆栈清理,...... );一般来说,只要您不编写库,您就不必担心。

__MINGW_NOTHROW#define 扩展为 __attribute__ ((__nothrow__)),这是一个特定于 MinGW 的扩展,告诉编译器认为该函数不会抛出异常;这让编译器可以执行一些优化。

请注意,所有这些都不是标准的 C 属性,而是编译器/平台特定的东西。同样,通常您不必担心它们,它们是使 CRT 正常工作所必需的,但只要您不构建库,您就可以在对它们一无所知的情况下逃脱。 :)

关于c - 函数声明的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016435/

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