| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:对C的一些疑问,高手请进
只看楼主 加入收藏
hzyzxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:76
专家分:168
注 册:2009-6-14
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
对C的一些疑问,高手请进
疑问一:库函数printf、scanf等形参数量可变怎么理解?
    在编译器win-tc中printf的函数原型是:int  _Cdecl  printf   (const char *format, ...);
    Vc里面的定义也类似。
    后来自己写了一个形参类似的空函数,很奇怪竟能编译通过,vc里也能通过。虽然形参列表中的三个句号不是C的标识符。
疑问二:编译器中头文件对库函数原型的声明中在返回值类型和函数名之间总有一个 _cdecl。这个符号是什么意思?
        我发现把_cdecl加在自己定义的函数中也能通过,且不影响结果。
    例如:如下定义的求最大值函数:
int _cdecl max(int x,int y)
        {return x>y?x : y;}
还有就是很多编译器对_cdecl都是高亮度语法显示。好像它也是一个关键字一样。
搜索更多相关主题的帖子: 疑问 
2009-10-20 09:24
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:10 
是调用函数的约定,   
  __stdcall   是按PASCAL的约定调用函数,参数按从左到右的顺序入栈,在函数返回前清除堆栈中的参数。   
  __cdecl   是按C的约定调用函数,参数按从右到做的顺序入栈,在函数调用返回以后清除堆栈中的参数。

我可好玩啦...不信你玩玩^_^
2009-10-20 09:48
hzyzxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:76
专家分:168
注 册:2009-6-14
收藏
得分:0 
                                 
2009-10-20 18:18
lostfate
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2009-10-6
收藏
得分:10 
顶一个
2009-10-20 20:39
快速回复:对C的一些疑问,高手请进
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020393 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved