探讨:关于编译器的问题

lswx 2004-11-10 09:59:18
最近在gcc 和dev-c++下编译C,发现一个奇怪的事
1非void型函数在有实现体的时候,不声明也可以编译过去;
2系统库函数,没有实现部分(在系统内),没有包含头文件,也可以编译过去;
当然这两种情况无一例外的,会导致最终运行结果错误,但是编译时不会发现,所以我一直在思考除了我们注意包含头文件外,还有什么方法可以发现这种问题?
http://community.csdn.net/Expert/topic/3539/3539261.xml?temp=.1009333
这个问题我问了公司的一个高人,他告诉我,这是编译器问题,做程序要仔细,我一直在想大家没有谁愿意犯这种错误,难道没有别的方法吗?我一直很相信编译器,因为我是个超菜的C初学者,对编程特别感兴趣,而且我喜欢东西弄的特别明白,不喜欢糊里糊涂的,希望有C 和Linux&Unix的高手教教,因为我觉得这里面人才济济,谢谢各位!
我的QQ:34476452
+入时 写上CSDN 就可以了!
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveisbug 2004-11-11
  • 打赏
  • 举报
回复
同意一楼,曾碰到过这个问题,申明的函数没有被包含,编译器用了默认,返回int,结果出现了奇怪的现象,很难查,因为忽略了编译warning。
xqlez 2004-11-11
  • 打赏
  • 举报
回复
加-Wall,你连这都不知道?
再加-Werror,ld就不会生成exe
lswx 2004-11-11
  • 打赏
  • 举报
回复
谢谢楼上的各位!
ykstars 2004-11-11
  • 打赏
  • 举报
回复
在 波兰c里面 变量的定义不能放在具体的程序代码中间 就是说定义变量必须在函数开头
Wolf0403 2004-11-10
  • 打赏
  • 举报
回复
1、不明白,给个例子代码?只要实现出现在引用之前就可以了啊~
2、gcc 自动链接 libc,除此之外 g++ 自动链接 libstdc++
3、你们高人自己也不知道……
  • 打赏
  • 举报
回复
C语言可以调用未声明的函数(不管是自定义还是系统函数).返回值被认为是int,如果你的参数类型,调用约定或者是返回值不对,很有可能就coredump,编译器不能检查这种错误,不过一般会有个警告.只要不忽略编译器警告,这类错误很容易发现.在C里你即使写 char main[] = { 0XCC }; 编译器照样编译连接,函数名,变量名对它来说不过是个标号罢了(一般会在前面加个_什么的).

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧