| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 833 人关注过本帖
标题:[原创]C/C++ 误区三 —— 函数原型
取消只看楼主 加入收藏
Antigloss
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:0 
[原创]C/C++ 误区三 —— 函数原型

C/C++ 误区三

—— 函数原型

作者:antigloss

http://cpp.ga-la.com

1. 预备知识 int foo( ) 等于 int foo( void ) ?

许多 C 程序员认为如果函数定义为“int foo( ) { return 0; }”,则这个函数不接受任何参数。其实这是一个误解。事实上,这个函数可以接受任意数目的参数。如果你的函数不需要接受任何参数,请定义为 int foo( void ) { return 0; } 。下面请看一个例子:

/* 文件名: 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 ) ,说明函数不接受任何参数,而函数定义中却有参数列表,当然不能通过编译,也就是说函数原型和函数的定义必须匹配。

搜索更多相关主题的帖子: 误区 函数 原型 
2005-08-06 00:16
快速回复:[原创]C/C++ 误区三 —— 函数原型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032318 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved