C/C++ 误区—— 函数原型[转]
来源:互联网 发布:mac香港专柜价格多少 编辑:程序博客网 时间:2024/04/28 19:49
1. 预备知识 — int foo( ) 等于 int foo( void )
/* 文件名: test.c */
int foo( )
{
return 0;
}
int main( void )
{
foo( 1, 2, 3 );
return 0;
}
以上的代码在 gcc3.2 和 vc6 都可以通过编译,并且没有任何警告信息。但是如果将 int foo( ) 改成 int foo( void ) ,gcc3.2 会警告说“传递给 foo 的参数太多”;而 vc6 则会警告说“foo 的参数列表为空”。这就证明了 int foo( ) 的确可以接受任意数目的参数,而 int foo( void ) 不接受任何参数。不过在 C++ 中,int foo( ) 和 int foo( void ) 等价。如果将上述代码保存为 test.cpp 进行编译,vc6 会告诉我们:error C2660: 'foo' : function does not take 3 parameters(错误 C2660: 'foo' : 函数不接受 3 个参数)。这就说明了 C++ 中,int foo( ) 的确和 int foo( void ) 等价。
2. C 和 C++ 中的函数原型
C++ 中函数原型和函数的定义必须匹配;而在 C 中,函数原型和函数定义可以不匹配。例如,下面一个程序在 C 中可以通过编译,但是在 C++ 中不能。
int foo( );
int main( void )
{
foo(20, 50);
return 0;
}
int foo(int a, int b)
{
return 0;
}
这是因为在 C 中,如果函数原型为“int foo( );”,则表示函数可以接受任意数目的参数(我们在 1 中做过这个实验),所以这个程序在 C 中通过编译,也就是说函数原型和函数定义可以不匹配。而在 C++ 中,int foo( ) 等价于 int foo( void ) ,说明函数不接受任何参数,而函数定义中却有参数列表,当然不能通过编译,也就是说函数原型和函数的定义必须匹配。
- C/C++ 误区—— 函数原型[转]
- [c]strcpy函数原型
- C/C++ 误区—— fflush(stdin)
- C/C++ 误区 —— fflush(stdin)
- c str常用函数原型
- C 函数声明, 函数原型, 函数定义
- C++与ANSI C函数原型差异——第七章(P186)
- C编程中不容忽视的函数原型
- [C 语言专栏] 为什么需要函数原型?
- C语言函数原型fgets fputs
- C语言部分函数原型实现
- c字符串函数原型 | from web 待
- (C)string的一些常用函数原型
- C语言函数原型的重要性
- C语言字符串操作函数-原型
- C语言内存处理函数原型实现
- C语言字符串处理函数原型实现
- C语言中函数原型的重要性
- [个人] 感受冬去春来
- 长城长
- 技术大会英雄谱
- 部门预算进行时
- 刺激微软
- C/C++ 误区—— 函数原型[转]
- 配置管理计划的新设想
- 学习Extjs与RoR的集成有感
- 放弃完美的需求管理
- 基于DSL的组织机构模型 之一:预告
- Post和Get的区别
- 组织机构DSL之二:参考资料(ruby hacking guide )的阅读笔记
- 3.5.7 记录槽(Record Slot)
- ddd quickly 中文版译者序