标题:
c语言---在头文件里定义变量有什么危害?
[打印本页]
作者:
51黑黑黑
时间:
2016-2-21 15:40
标题:
c语言---在头文件里定义变量有什么危害?
我们在进行嵌入式开发时,最常用的语言就是c语言,在定义变量时,一般有两种方法:
第一种:在一个c文件里定义变量,另外一个c文件中需要引用时,使用extern在当前文件再次声明一下,这种方式存在一个弊端,那就是如果有多个文件引用这个变量,那么每个文件中就都需要是使用extern关键字对该变量进行声明;
第二种就是在c文件中定义变量,而在c文件对应的头文件中使用extern关键字对其进行声明,这样其他文件要引用该变量时,只需要将该文件的头文件包含进去就可以了。
那么为什么不能在C语言的头文件里定义变量呢?
让我们来举个例子,假设有如下工程:
该工程包含如下文件:
第一个文件:
test.h文件
#ifndef __TEST_H
#define __TEST_H
unsigned int testValue;
unsigned int changeValue( void );
#endif
test.c文件
#include "test.h"
unsigned int changeValue( void )
{
testValue= 1;
return testValue;
}
main.c文件
#include "test.h"
unsigned int globeValue;
void main( )
{
testValue = 5;
globeValue = changeValue();
while(1);
}
我们将changeValue放入watchwindow中,单步运行,查看testValue的变化
发现当运行了globeValue =changeValue();后,testValue的值没有变化,仍然是5,为什么会这样呢?
因为当在test.h中定义testValue变量时,test.h被引用几次,就产生了几个不同的testValue全局变量,所以尽可能不要在头文件中定义变量。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1