读《C陷阱与缺陷》(一)

时间:2022-10-26 16:08:59

#include<stdio.h>

struct logrcc{

int date;

int time;

int code;

}

main()

{

printf("Hello world !\n");

}

这段代码,在DEV编译器上不会出错,但在linux上报警告,但是仍然可以运行。刚开始看这段代码时,感觉是错的,但是它绝对是运行通过了,这是c陷阱的分号用法的不规范造成的。因为编译器默认main函数返回值为struct logrcc类型了。

#include<stdio.h>

struct logrcc{

int date;

int time;

int code;

}

myfun()

{

printf("Hello world !\n");

}

int main()

{

  myfun();

return 0;

}

如果把代码换成这个这样,我想,错误就会更隐蔽了。他在linux上也不会报错。

详情参考:《C Traps and Pitfalls》【美】Andrew Koenig著。P26