详谈C与C++的函数声明中省略参数的不同意义
2017-11-17 08:22
477 查看
一直都以为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)
以上这篇详谈C与C++的函数声明中省略参数的不同意义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- C和C++对带空参数列表的函数声明的不同处理
- C++小技巧emun namespace 指针*、&(在函数里做参数) exit与return Win32宏定义 双等号代表意义
- C/C++ 函数原型(或函数声明)的相同点与不同点
- C函数前向声明省略参数
- C和C++中泛型编程 - 适应不同类型参数的函数
- C++中 当函数所有参数都需要类型转换时 需要将其声明为non-member函数
- C/C++中默认参数在哪指定?函数声明还是定义?默认参数需放在右边
- C/C++ 中 exit() 函数的参数意义
- 读书笔记 effective c++ Item 24 如果函数的所有参数都需要类型转换,将其声明成非成员函数
- 详谈C++中数组作为函数参数
- OC中 多参数省略函数的声明和实现
- C++强制转换不同声明或类型的函数指针隐患
- c++ 父类成员函数的参数中有子类类型的对象 (前置声明解决)
- C++强制转换不同声明或类型的函数指针隐患
- C++强制转换不同声明或类型的函数指针隐患
- C++关于函数声明和定义中参数赋值为0调用问题演示
- c++ 如果函数无参数,那么应声明其参数为 void
- C++离航篇——函数默认参数、函数重载、内敛函数
- C++函数的声明,实现和默认实参
- [C++学习历程]基础部分 C++中的函数中的值参数、地址参数、引用参数实际例子