C++函数原型详解
在编译器遇到对特定函数的调用之前,它必须已经知道有关函数的某些内容。特别是,它必须知道函数使用的形参的数量、每个形参的类型以及函数的返回类型。通常,这可以通过在程序中包含一个函数原型来实现。当然,main 函数除外,它永远不需要原型,因为它是程序的起点。
看一个程序示例:
程序中,displayMessage 函数原型被放在 main 函数的上面。如果没有该原型放在那里,为编译器提供必要的信息,那么就必须将整个 displayMessage 函数的定义语句放置在 main 函数之前,这样才能调用它,如下面程序所示:
比如说,若一个程序中包含有 3 个函数:main、deep 和 deeper,其中 deeper 函数在 deep 函数中调用,那么如果没有函数原型的话,就必须先对它们进行正确的顺序组织:
看一个程序示例:
// This program has two functions: main and displayMessage. #include <iostream> using namespace std; // Function prototype void displayMessage(); //mian函数 int main() { cout << "Hello from main.\n"; displayMessage(); // Call.displayMessage cout << "Now we are back in the main function again. \n"; return 0; } void displayMessage() { cout << "Hello from the displayMessage function.\n"; }此程序中 displayMessage 函数的原型为:
void displayMessage();
这个原型看起来类似于函数头,只不过最后有一个分号。该语句告诉编译器,函数 displayMessage 不使用形参,并且具有 void 返回类型,这意味着它不返回值。程序中,displayMessage 函数原型被放在 main 函数的上面。如果没有该原型放在那里,为编译器提供必要的信息,那么就必须将整个 displayMessage 函数的定义语句放置在 main 函数之前,这样才能调用它,如下面程序所示:
// This program has two functions: main and displayMessage. #include <iostream> using namespace std; void displayMessage() { cout << "Hello from the displayMessage function.\n"; } //mian函数 int main() { cout << "Hello from main.\n"; displayMessage(); // Call.displayMessage cout << "Now we are back in the main function again. \n"; return 0; }有些程序员更喜欢使用这种组织结构,将 main 函数放在最后面。但是,绝大多数程序员还是认为,对于除 main 之外的其他函数来说,使用一个原型语句将它放置在 main 前面更加方便。特别是在一个程序中包含许多函数,而这些函数又调用其他函数的情况下,这样处理好处更大。
比如说,若一个程序中包含有 3 个函数:main、deep 和 deeper,其中 deeper 函数在 deep 函数中调用,那么如果没有函数原型的话,就必须先对它们进行正确的顺序组织:
- 函数 deeper 需要放置在最前面,这样 deep 才能调用它。
- 函数 deep 需要第 2 个放置,这样 main 才能调用它。
- main 函数放在最后。
注意,在调用函数之前,必须放置函数定义或使用函数原型,否则程序将无法编译。
在使用函数原型之后,实际上的函数定义语句就可以随意放置而不必担心顺序问题了。只要将原型语句放置在程序顶部,紧随在using namespace std;
语句之后即可,这样做将确保它们在 main 或其他函数之前被识别。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算