加上__cdecl 在C语言中和普通的函数有什么区别呢
答案:2 悬赏:80 手机版
解决时间 2021-12-28 17:04
- 提问者网友:别再叽里呱啦
- 2021-12-28 02:24
加上__cdecl 在C语言中和普通的函数有什么区别呢
最佳答案
- 五星知识达人网友:野味小生
- 2021-12-28 02:31
__cdecl最前面有两条下划线,这说明了这是一个编译器扩展,也就是说这只在特定的编译器上有效,在其他编译器上可能是错误的格式。
cdecl是调用约定的一种(其他还有stdcall,fastcall等),表示一种调用函数时参数传递的顺序,只有确定参数传递顺序,才能正确调用函数。cdecl支持变长参数,因此C语言较常用的就是就是cdecl,但有时也必须使用别的调用约定(如WindowsAPI要求调用约定为stdcall)
大多数编译器应该都有类似的扩展(但名称和格式可能不同),有的编译器默认为所有的函数未经特殊说明都用cdecl调用约定调用,但有的编译器可以改变默认调用约定,因此带有__cdecl的函数和不带有__cdecl的函数实际编译产生的代码可能相同,也可能不同……
cdecl是调用约定的一种(其他还有stdcall,fastcall等),表示一种调用函数时参数传递的顺序,只有确定参数传递顺序,才能正确调用函数。cdecl支持变长参数,因此C语言较常用的就是就是cdecl,但有时也必须使用别的调用约定(如WindowsAPI要求调用约定为stdcall)
大多数编译器应该都有类似的扩展(但名称和格式可能不同),有的编译器默认为所有的函数未经特殊说明都用cdecl调用约定调用,但有的编译器可以改变默认调用约定,因此带有__cdecl的函数和不带有__cdecl的函数实际编译产生的代码可能相同,也可能不同……
全部回答
- 1楼网友:三千妖杀
- 2021-12-28 03:37
这些函数是有函数体的,不过函数体的位置在对应的库文件中,头文件中只有函数原型声明……
cdecl是一种调用约定,表示一种特定的参数和返回值传递方式,在跨文件(甚至跨语言)调用函数的时候才需要指定。这个关键词在不同的编译器上写法不完全一样,例如gcc就只接受__attribute__((cdecl)),而不是使用 _cdecl 这样的写法,如果使用_cdecl这个保留字,你的代码就只能在一种编译器上编译……
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯