C与C++的函数声明中省略参数的不同意义
一直都以为C/C++中形如
int func();
这样的函数声明其意义就是一个参数 void(没有参数)的函数。然而今天在看C++的时候突然看到这么一句:
对于带空参数表的函数,C和C++有很大的不同。在C语言中,声明
int func2();
表示“一个可带任意参数(任意数目,任意类型)的函数”。这就妨碍了类型检查。而在C++语言中它就意味着“不带参数的函数”。
这一点老师并没有讲到,学校教科书里也没有提到,带着好奇心,我特意试了一下
test.c
#include <stdio.h>
void fun();
int main()
{
fun(1, 1);
return 0;
}
void fun(int a, int b)
{
printf("%d\n", a+b);
}
编译通过
$ gcc -Wall test.c -o test
$ ./test
2
$ mv test.c test.cpp
$ g++ -Wall test.cpp -o test
test.cpp: 在函数‘int main()’中:
test.cpp:6:10: 错误:too many arguments to function ‘void fun()’
fun(1, 1);
^
test.cpp:3:6: 附注:在此声明
void fun();
^~~
这也解释了为什么主函数要写成这样的原因
int main(void)
相关推荐
fengjing81 2020-01-19
小飞侠V 2020-11-02
linmufeng 2020-09-08
angqiuli 2020-06-06
fengjing81 2020-01-10
First00 2020-01-05
yfisaboy 2019-12-28
fuzhikunpython 2019-12-02
zscomehuyue 2019-11-26
陈旭阳 2019-11-16
ericasadun 2019-08-16
racy 2019-09-08
smallMK 2019-05-21
xiaoren 2019-07-01
zyb00yaonuli 2017-01-24
liubingger 2016-12-13
csdnhaow 2016-10-11
ncisoft 2016-01-19
苗疆三刀的随手记 2019-06-27