Buk*_*ksy 7 c function definition
我一直在阅读stdio.h文件,我很困惑.
例如,有这一行:
_CRTIMP FILE* __cdecl __MINGW_NOTHROW fopen (const char*, const char*);
Run Code Online (Sandbox Code Playgroud)
我知道"FILE*"表示返回类型,我发现_CRTIMP是常量定义为
# ifndef _CRTIMP
# define _CRTIMP __declspec(dllimport)
# endif
Run Code Online (Sandbox Code Playgroud)
但无论如何我也不明白,那是什么?什么是其余的字符串(__ cdecl,__ MINGW_NOTHROW)?
__declspec(dllimport)指定该函数将从单独的dll导入; 我想,根据CRT静态/动态链接设置,它以不同的方式定义.
__cdecl是用于函数的调用约定; 调用约定告诉编译器函数如何被调用(在哪个顺序参数被推入堆栈,如果任何寄存器用于参数,存储返回值,谁负责堆栈清理,... ); 一般来说,只要你不写库就不用担心.
__MINGW_NOTHROW是#defined扩展为__attribute__ ((__nothrow__)),这是一个MinGW特定的扩展,告诉编译器该函数不会抛出异常; 这使编译器可以执行一些优化.
请注意,所有这些都不是标准C属性,而是编译器/平台特定的东西.同样,一般来说你不应该担心它们,它们需要使CRT工作正常,但只要你不构建库,你就可以在不知道它们的情况下逃脱.:)