- 论坛徽章:
- 0
|
首先你要清楚编译和链接是两个分开的过程
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当成一个指针,所以访问的地方越界(这样低的地址,很可能是操作系统的保留区)。
- #include <stdio.h>
- int main(void){
- int a =time(100,"200","fuck");
- printf("%d\n",a);
- return 0;
- }
复制代码
所以never never不要忘记include对应的头文件,这样产生的bug有你受的。
ps:再说一句,c traps and pitfalls 和Expert c programming都是很好的书,可以看看
[ 本帖最后由 churchmice 于 2009-7-16 20:51 编辑 ] |
评分
-
查看全部评分
|