concept [1]
函数 (function) 是执行任务的语句块。
函数的作用:
- 提高代码的可重用性并减少冗余
- 代码模块化
- 代码易读性
- 使代码模块化
函数的分类
C语言中有两种类型的函数:
- 标准库函数:C中的内置函数,在头文件中定义
#include <stdio.h>
- 用户自定义函数:用户自定义的函数
#include "stdio.h"
函数三部曲
C语言中函数分为三个方面,声明(declaration),定义(defining),调用(calling)
声明
声明是让编译器知道函数的名称、参数信息、参数的返回值的类型。
(type) function_name({type args...});
隐式声明(implicit) :当在main之后定义的函数而未声明,默认编译器会做隐式声明。
ISO/IEC 9899:1990 中 关于函数声明的部分:
函数在调用前必须有一个可用的声明,如果没有被声明,则该函数默认被隐式声明,该隐式声明没有参数,返回值为int [2]
定义
C中函数定义的语法如下
return_type function_name(arg1, arg2, ... argn)
{
function body // 函数中要处理任务的逻辑
}
- return_type:函数返回值的数据类型
- function_name:函数名
- arg1, arg2, …argn:参数列表(可选),定义传递给函数的数据类型、顺序和参数的数量。
- function body:调用函数时任务处理和执行的语句
调用
调用是指要由编译器执行的函数,可以在任何部分调用
虚函数
如果函数没有返回值,则使用关键字 void,主要用于两个方面:
- 打印具体信息供用户阅读的函数
- 引用参数,函数通常不是用于返回一个内容,而是修改引用参数的,无需返回值
函数的退出
- exit() 是一个终止当前进程的系统调用(无论在代码哪里调用);非C语言内置功能
- return:向调用函数提供退出状态并将控制权返回给调用函数,C语言内置功能
多文件编程 [3]
多文件程序(multi-file) 是指多个含有不同功能的代码文件( .c 文件模块),编译到一起,生成一个二进制文件。
通常包含三部分:
-
编译:通过编译器编译多个文件程序
-
函数原型(声明):告知编译器如何使用,表现为:
- 函数在一个文件中定义,在另一个文件中调用
- 想对文件中的函数重新排序
- 函数相互调用,递归
-
头文件:使多个文件中的函数可以访问定义和声明,通常情况下包含:
- 全局变量和全局常量
- 类,结构体,联合体,枚举等
- 创建类型名称的 typedef 语句
- 函数声明
- 包含其他文件的语句,如math.h
防止头文件重复包含
windows
#pragma once
linux
#ifndef __HEAD_H__
#define __HEAD_H__
.... head file body
#endif
Reference
[1] c function
[2] Are prototypes required for all functions in C89, C90 or C99?
[3] multi-file