函数传入参数个数错误,C语言警告都不报一个?

ArayChou 2010-11-05 03:49:14
int foo();
int bar();

int main(void)
{
return foo(2, 3, 4); //3个参数
return 0;
}

int foo(int a, int b)
{
return bar(a); //1个参数
}

int bar(int c, int d) //2个参数
{
int e = c + d;
return e;
}

如上程序,编译的时候不报任何警告,执行结果还是对的,无语啊无语。 难怪用C
的都是超高手,我用了5年java,在来学C非常地痛苦。。。。

aray@aray:~/C$ gcc -g -Wall test.c
aray@aray:~/C$ ./a.out
aray@aray:~/C$ echo $?
5


PS: 我想学Linux下的C编程,在本论坛提出问题好呢? 还是把问题贴到“开发语言 ==> C/C++ ==> C语言”好?
...全文
539 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArayChou 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

那是你函数原型声明不完备,把前两行改为下面的样子,你再看
int foo(int a, int b);
int bar(int c, int d);
[/Quote]

受教了,这个叫函数原型申明不完备。

同时,也提醒了我 int foo() 和 int foo(void)是有差别的。拜谢
ak_kay 2010-11-05
  • 打赏
  • 举报
回复
楼上都说了....
小魔菇 2010-11-05
  • 打赏
  • 举报
回复
声明不对
结果也不对 echo的结果是5啊
justkk 2010-11-05
  • 打赏
  • 举报
回复
或者你用g++来编译
g++ test.c

它的类型检查会严格的多..
steptodream 2010-11-05
  • 打赏
  • 举报
回复
而且你哪个结果哪儿对的呀?
justkk 2010-11-05
  • 打赏
  • 举报
回复
那是你函数原型声明不完备,把前两行改为下面的样子,你再看
int foo(int a, int b);
int bar(int c, int d);

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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