C/C++全局变量的定义与引用问题
2016-07-21 16:59
369 查看
最近在忙live555项目;说实话这是我做的第一个大型项目。虽然工作这么久还真是第一次做这么大项目;感觉自己这一年还真是没有一点进步;加个全局变量废了我半天力。废话不多说,切入正题
全局变量,最早我看书C primer Plus里说的应该是叫做局外变量吧。总是就是以关键字extern 在一个头文件 声明的,然后这个被声明的变量可以被项目里的任意一个.cpp或者.c文件引用,引用的方式有两种,一种是通过 extern声明引用,一种是包含这个头文件就可以直接用了。举个例子:
头文件 ext.h
#ifdef _EXT_H_
#define _EXT_H_
extern int data;// 声明
#endif
b.h
#ifdef _B_H_
#define _B_H_
b_out();
#endif
文件 b.c
#include "ext.h"
#include "b.h"
int data; //定义,可以赋值,也可以不赋值 只能定义一次
b_out(){
printf("b.data = %d\n",data);//赋值
}
使用文件 main.c
#include "ext.h"
#include"b.h"
int main(){
data=0;//赋值
b.out();
}
看着很简单, 但是就因为这个定义问题 让我绕了不少弯路,因为项目比较大,我明明定义了,编译报错说没定义,有时候更会说没声明,好几次我都怀疑是Makefile问题,事实证明有这方面的一点问题,但不是主要问题,经过我看了多个博客后,我终于知道这个定义问题必须定义虽然只能定义一次,但不能任意定义,而应该定义在一个基文件,这个是我造的词,怎么说这个基文件呢,比如,你编译一个文件main.cpp 生成一个main文件, 然后这个main还依赖另外一个base.cpp编译生成的base.o文件才能编译完成,那么这个base.cpp就是基文件,按照软件来说就是依赖包。倘若你在main里定义了
然后在base里引用但没定义就会报错未定义,要是都定义会报错重复定义。
全局变量,最早我看书C primer Plus里说的应该是叫做局外变量吧。总是就是以关键字extern 在一个头文件 声明的,然后这个被声明的变量可以被项目里的任意一个.cpp或者.c文件引用,引用的方式有两种,一种是通过 extern声明引用,一种是包含这个头文件就可以直接用了。举个例子:
头文件 ext.h
#ifdef _EXT_H_
#define _EXT_H_
extern int data;// 声明
#endif
b.h
#ifdef _B_H_
#define _B_H_
b_out();
#endif
文件 b.c
#include "ext.h"
#include "b.h"
int data; //定义,可以赋值,也可以不赋值 只能定义一次
b_out(){
printf("b.data = %d\n",data);//赋值
}
使用文件 main.c
#include "ext.h"
#include"b.h"
int main(){
data=0;//赋值
b.out();
}
看着很简单, 但是就因为这个定义问题 让我绕了不少弯路,因为项目比较大,我明明定义了,编译报错说没定义,有时候更会说没声明,好几次我都怀疑是Makefile问题,事实证明有这方面的一点问题,但不是主要问题,经过我看了多个博客后,我终于知道这个定义问题必须定义虽然只能定义一次,但不能任意定义,而应该定义在一个基文件,这个是我造的词,怎么说这个基文件呢,比如,你编译一个文件main.cpp 生成一个main文件, 然后这个main还依赖另外一个base.cpp编译生成的base.o文件才能编译完成,那么这个base.cpp就是基文件,按照软件来说就是依赖包。倘若你在main里定义了
然后在base里引用但没定义就会报错未定义,要是都定义会报错重复定义。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 许多数据中心的工作者很满意他们的工作,将鼓励他们的孩子继续从事这份工作
- 零编程经验的我是如何找到工作的
- Lua和C语言的交互详解
- Lua中的全局变量、非全局变量总结
- js DOM 元素ID就是全局变量
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法