乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
C 1.1 多文件编程
2018-06-17 08:23:04
80
0
0
admin
> 文件间相互调用,头文件,静态变量/动态变量/全局变量/局部变量及其作用域 #多文件调用 * 来自外部文件的变量要用extern修饰,外部的函数也要写上函数原型 * 函数中声明的变量作用域在函数以内,函数运行结束这个变量也销毁了 ##例子 文件1: ```c #include <stdio.h> int global_var=1; extern global_var_from_bbb;//外部变量 void function_from_bbb(int);//外部函数 void function_1(int num) { char abc[] = "function_1"; printf("%s %d\n",abc,num); } void function_2(int num) { char abc[] = "function_2"; printf("%s %d\n",abc,num); } main () { function_1(global_var); function_2(global_var_from_bbb); function_from_bbb(123); } ``` 文件2: ```c #include <stdio.h> int global_var_from_bbb=2; void function_from_bbb(int num) { char abc[] = "function_from_bbb"; printf("%s %d\n",abc,num); } ``` 编译运行: ``` [root@test muti]# gcc aaa.c bbb.c [root@test muti]# ./a.out function_1 1 function_2 2 function_from_bbb 123 ``` *** #静态变量 * 只有一次初始化,如果在函数内声明,作用域仍是函数内,但是不随函数结束而销毁,下次调用该函数的时候还有值。 ```c #include <stdio.h> void function(void); main() { function(); function(); } void function(void) { static int a; a++; printf("%d\n",a); } ``` 运行结果 ``` [root@test muti]# gcc a.c [root@test muti]# ./a.out 1 2 ``` * 静态全局变量的作用域是声明处到文件结尾,不能被外部文件调用。 *** #头文件 > 由于大项目,多个文件可能要重复写相同的函数原型或者变量,为了减少麻烦,我们把大家都要的内容写在一个文件里让大家调用,我们叫这个头文件。 **例子:** 头文件head.h ```c extern var_from_aaa; extern var_from_bbb; void function_from_aaa(int); void function_from_bbb(void); ``` 文件1 ```c #include <stdio.h> #include "head.h" int var_from_aaa=1; void function_from_aaa(int num) { char abc[] = "function_from_aaa"; printf("%s %d\n",abc,num); } main () { function_from_aaa(var_from_aaa); function_from_aaa(var_from_bbb); function_from_bbb(); } ``` 文件2 ```c #include <stdio.h> #include "head.h" int var_from_bbb=2; void function_from_bbb(void) { char abc[] = "function_from_bbb"; printf("%s\n",abc); printf("call function_from_aaa:"); function_from_aaa(100); } ``` 运行结果: ``` [root@test muti]# gcc aaa.c bbb.c [root@test muti]# ./a.out function_from_aaa 1 function_from_aaa 2 function_from_bbb call function_from_aaa:function_from_aaa 100 ```
上一篇:
C 1.0 工具 gdb
下一篇:
C 1.2 工具 make
文档导航