目录
## 函数
## 函数分类
## 函数定义
1、无参数无返回值
2、有参数无返回值
3、有参数有返回值
## 函数声明
## 局部变量和全局变量
## 多文件编程
如何避免把同一个头文件 include 多次,或者头文件嵌套包含?
命令行编译文件
头文件包含的区别
## extern关键字
## 函数
- 一种可重用的代码块
- 用于执行特定任务或完成特定功能
- 对具备相同逻辑的代码进行封装,提高代码的编写效率,实现对代码的重用
## 函数分类
- 系统函数(库函数)
- 自定义函数
## 函数定义
1、无参数无返回值
// 函数定义
void 函数名() {
函数体
}
// 函数调用
函数名();
2、有参数无返回值
// 函数定义
void 函数名(形参列表) {
函数体
}
// 函数调用
函数名(实参列表);
3、有参数有返回值
// 函数定义
返回类型 函数名(形参列表) {
函数体
return 和返回类型一致的数据(或变量);
}
// 函数调用
和返回类型一致的变量 = 函数名(实参列表);
* 返回值:结束该函数,在return后的代码不会再被执行
## 函数声明
- 如果函数定义代码没有放在函数调用的前面,这时候需要先做函数的声明
- 所谓函数声明,相当于告诉编译器,函数是有定义的,再别的地方定义,以便使编译能正常进行
- 注意:一个函数只能被定义一次,但可以声明多次
#include <stdio.h>
// 函数的声明,分号不能省略
// 函数声明的前面可以加extern关键字,也可以不加
// extern int my_add(int a, int b);
int my_add(int a, int b);
// 另一种方式,形参名可以不写
// int my_add(int, int );
int main() {
// 函数调用
int temp = my_add(10, 20);
printf("temp = %d\n", temp);
return 0;
}
// 函数定义
int my_add(int a, int b) {
// 实现2个形参相加,并返回累加的结果
int res = a + b;
return res;
}
## 局部变量和全局变量
局部变量:
- 定义在代码块
{}
里面的变量称为局部变量(Local Variable) - 局部变量的作用域(作用范围)仅限于代码块
{}
- 离开该代码块
{}
是无效的,离开代码块{}
后,局部变量自动释放
全局变量:
- 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件
## 多文件编程
- 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件
- 在头文件对应的xxx.c中,实现xxx.h声明的函数
相当于把函数声明摘出来放在了另一个.h的文件中
如何避免把同一个头文件 include 多次,或者头文件嵌套包含?
在.h文件中添加以下内容
方法一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
// 声明语句
#endif
方法二:
#pragma once
// 声明语句
命令行编译文件
gcc -g main.c func.c -o main.exe
- -g 指定编译的文件,多个文件用空格隔开。
- 注意:只需要编译c文件,h文件不需要加入进去;
- -o 指定生成可执行文件的名字;
头文件包含的区别
#include <>
表示系统直接按系统指定的目录检索
#include ""
表示系统先在 "" 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,再按系统指定的目录检索
-
#include ""
:优先在当前文件所在的目录中查找头文件,适用于用户自定义头文件。 -
#include <>
:直接在系统头文件目录中查找头文件,适用于系统标准库头文件。
## extern关键字
主要用于声明外部变量或函数,当将一个变量或函数声明为extern
时,该变量或函数是在其他地方定义的,我们只是在当前文件中引用它。
#include <stdio.h>
extern int global_val;
extern void printf_val();
int main() {
global_val = 100;
printf_val();
return 0;
}
#include <stdio.h>
int global_val;
void printf_val() {
printf("other->global_val: %d\n", global_val);
}