C/C++全局变量的定义与引用问题
来源:互联网 发布:非电气化铁路 知乎 编辑:程序博客网 时间:2024/06/03 13:41
最近在忙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/C++全局变量的定义与引用问题
- C++const全局变量与非const全局变量的重定义问题
- C\C++小知识: 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- C语言中全局变量的定义及重复包含问题
- C语言中全局变量的定义与调用
- C语言中全局变量的定义与调用
- C语言头文件定义全局变量问题
- C语言 全局变量定义与声明
- C语言全局变量定义与声明技巧
- C语言中的全局变量定义与使用
- cocos2dx 定义全局变量(C++)
- C语言定义全局变量
- C/C++定义全局变量
- C中引用重名的全局变量
- C/C++全局变量的定义方法
- phpems导出成绩增加自定义字段
- jQuery hover延时触发
- android基础(四)
- 5-32 说反话-加强版 (20分)
- UVA 10106-Product
- C/C++全局变量的定义与引用问题
- setTimeout()和setInterval()的区别
- Divisibility(区间找数,普通方法超时)
- ubuntu设置远程桌面
- Android Studio 使用的快捷键
- 商品规格前端显示解决方案
- 精通C++资源管理-在资源管理类中小心coping行为
- 判断JAVA字符串中是否有中文字符
- java.lang.IllegalStateException: getWriter() 异常(Filter时)