C语言函数声明
2015-06-05 11:22
309 查看
在C语言中,函数声明称为函数原型(function prototype)。使用函数原型是ANSI C的一个重要特点。它的作用主要是利用它在程序的编译阶段对调用函数的合法性进行全面检查。
说明:
<1> 以前的C版本的函数声明方式不是采用函数原型,而只是声明函数名和函数类型。
如:float add(); 不包括参数类型和参数个数。系统不检查参数类型和参数个数。新版本也兼容这种用法,但不提倡这种用法,因为它未进行全面的检查。
<2> 实际上,如果在函数调用前,没有对函数作声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数的声明,并将函数类型默认为int型。如一个max函数,调用之前没有进行函数声明,编译时首先遇到的函数形式是函数调用"max(a, b)",由于对原型的处理是不考虑参数名的,因此系统将max()加上int作为函数声明,即int max(); 因此不少教材说,如果函数类型为整型,可以在函数调用前不必作函数声明。但是使用这种方法时,系统无法对参数的类型做检查。或调用函数时参数使用不当,在编译时也不会报错。因此,为了程序清晰和安全,建议都加以声明为好。
<3> 如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。
<4> 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调用函数中不必对所调用的函数再作声明
说明:
<1> 以前的C版本的函数声明方式不是采用函数原型,而只是声明函数名和函数类型。
如:float add(); 不包括参数类型和参数个数。系统不检查参数类型和参数个数。新版本也兼容这种用法,但不提倡这种用法,因为它未进行全面的检查。
<2> 实际上,如果在函数调用前,没有对函数作声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数的声明,并将函数类型默认为int型。如一个max函数,调用之前没有进行函数声明,编译时首先遇到的函数形式是函数调用"max(a, b)",由于对原型的处理是不考虑参数名的,因此系统将max()加上int作为函数声明,即int max(); 因此不少教材说,如果函数类型为整型,可以在函数调用前不必作函数声明。但是使用这种方法时,系统无法对参数的类型做检查。或调用函数时参数使用不当,在编译时也不会报错。因此,为了程序清晰和安全,建议都加以声明为好。
<3> 如果被调用函数的定义出现在主调函数之前,可以不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用作正确性检查。
<4> 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调用函数中不必对所调用的函数再作声明
相关文章推荐
- week14_1.cpp
- Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译)
- week14_2.cpp
- c++ 适配器模式(adapter)2
- Google Mock启蒙篇 [2] (Google C++ Mocking Framework for Dummies 翻译)
- 【Clone Graph】cpp
- VS2010编写的c++程序输出结果一闪而过怎么解决
- 【C++】多个类的DLL封装及调用
- 写c++代码时,一定要注意初始化!
- PS 图像黑白调整算法(彩色图转灰度图)(VC++)
- java定义在局部的内部类、匿名内部类 (接《c++与java嵌套类比较》)
- c++与java在嵌套类方面的比较
- 《C++primer》第五版 第四章 第五章 笔记
- 处理c#调用c++dll所引起的“找不到指定模块"和BadImageFormatException异常
- 总结:用一个例子包含c++的所有的基本知识点(一)
- C语言str函数系列
- C语言:变量和函数引用的总结
- Qt的QString和C++string之间的转换
- 【Word Break II】cpp
- 【C++系统服务】监控程序内存占用