找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2621|回复: 0
打印 上一主题 下一主题
收起左侧

c语言---在头文件里定义变量有什么危害?

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 2016-2-21 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                               我们在进行嵌入式开发时,最常用的语言就是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全局变量,所以尽可能不要在头文件中定义变量。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表