免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13836 | 回复: 9
打印 上一主题 下一主题

关于time()和头文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-16 20:13 |只看该作者 |倒序浏览
为什么不加<time.h>,time()也可以使用啊

论坛徽章:
0
2 [报告]
发表于 2009-07-16 20:26 |只看该作者
把程序贴出来看看,肯定哪个头文件里面包含了

论坛徽章:
0
3 [报告]
发表于 2009-07-16 20:36 |只看该作者
首先你要清楚编译和链接是两个分开的过程
time函数在libc中,而libc是gcc默认链接的库之一,所以即使你不include相应的文件,链接也是能够通过的
至于编译,由于你没有include头文件,gcc在碰到time的时候,会根据这个函数的调用参数自动推断出一个返回int的函数原型,这个叫做"implicit declaration "
你-Wall就能看到了
warning: implicit declaration of function ‘time’


由于缺少function prototype,所以你的参数可以乱写,下面的代码完全能通过编译和链接,但是运行的时候就是segfault,虽然正确的参数只有一个,是time_t *类型的,现在你传进去3个,程序照样能编译链接通过,运行时出错是因为现在程序把常量100当成一个指针,所以访问的地方越界(这样低的地址,很可能是操作系统的保留区)。

  1. #include <stdio.h>
  2. int main(void){
  3.     int a =time(100,"200","fuck");
  4.     printf("%d\n",a);
  5.     return 0;
  6. }
复制代码


所以never never不要忘记include对应的头文件,这样产生的bug有你受的。

ps:再说一句,c traps and pitfalls 和Expert c programming都是很好的书,可以看看

[ 本帖最后由 churchmice 于 2009-7-16 20:51 编辑 ]

评分

参与人数 2可用积分 +20 收起 理由
langue + 10 鼓励
net_robber + 10 我很赞同

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2009-07-16 21:37 |只看该作者

回复 #3 churchmice 的帖子

解释的相当清楚啊,厉害

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
5 [报告]
发表于 2009-07-17 08:00 |只看该作者

回复 #3 churchmice 的帖子

真是牛人

论坛徽章:
0
6 [报告]
发表于 2009-07-17 08:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2009-07-17 08:50 |只看该作者
三楼很细心加耐心,不会是MM吧

论坛徽章:
0
8 [报告]
发表于 2009-07-17 10:57 |只看该作者
同意三楼的 (PS 要想避免此类错误,最好用lint工具检测一遍),最近在用splint,感触颇多

论坛徽章:
0
9 [报告]
发表于 2009-07-17 12:21 |只看该作者

回复 #7 ubuntuer 的帖子

必然是gg
搞it的女人真是罕见啊

论坛徽章:
0
10 [报告]
发表于 2009-07-17 12:22 |只看该作者

回复 #6 cj_gameboy 的帖子

集成电路的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP