c语言h文件定义变量,补习C语言之在.h文件中定义全局变量

话说在一次整理code的时候,无意间将一个原本定义在.c文件中的全局变量移动到.h 文件中(此全局变量被多个.c文件使用),然后突然不能生成.ko(linux中可动态装载的驱动模块).怎么回事?难道是移动code的时候弄错了?仔细一看提示信息,原来是 multiple definition.没整理之前的code是将此全局变量定义在file***.c 中, 然后在其他的.c中使用的是extern 导入,当时可以很顺利的编成.ko.后来由于感觉code不美观,在整理code的时候把它提到了file***.h中,让使用到这个全局变量的.c都 include file***.h(貌似这样做不是很好?暂时不管了).怎么就这么简单移动了一下code,就会出现问题?(有段时间没写 C  code了,^_^...).

于是乎,开始写一个简单的测试code来找原因. 下面的几段估计全世界的会玩电脑的人都能看懂的code. 先贴上:

//file1.h

#ifndef __FILE1_H__

#define __FILE1_H__

int i;

#endif

//file2.h

#ifndef __FILE2_H__

#define __FILE2_H__

#include "file1.h"

extern void file2_change_i_value(void);

#endif

//file1.c

#include "file1.h"

#include "file2.h"

void main(void)

{

printf("before i = %d\n", i);

file2_change_i_value();

printf("after i = %d

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: static关键字可以用于限制变量和函数的作用域,使其只在当前文件可见,不能被其他文件访问。在.c文件,static可以用于定义静态变量和静态函数。静态变量只能在定义它的函数使用,不会对其他函数产生影响。静态函数只能在定义它的文件调用,不能被其他文件调用。在.h文件,static通常用于定义静态函数的声明,以避免与其他文件的同名函数发生冲突。如果在.h文件定义静态变量,由于每个包含该头文件的.c文件都会拥有该变量的一个副本,容易造成重复定义错误。因此,通常不建议在.h文件定义静态变量。 ### 回答2: 在C语言,可以使用static来限制变量或函数的作用域。在.h文件和.c文件,static的使用方式有所不同。 在.h文件,如果我们将函数或变量声明为static,那么它们的作用域将被限制在当前文件。这意味着在其他文件无法直接访问这些变量或函数,可以避免命名冲突。通常,在.h文件不使用static来声明变量,因为.h文件是用于定义接口和声明函数的头文件。 在.c文件,可以使用static来定义全局或局部变量。当在函数内部使用static关键字声明变量时,该变量的作用域仅限于当前函数。它被称为局部静态变量,每次函数运行后,变量的值都会被保留下来,不会被销毁。这对于需要在函数调用之间保持状态的情况非常有用。 当在函数外部使用static声明变量时,该变量将具有文件作用域,只能在当前.c文件访问。这对于希望隐藏变量和函数的实现细节的情况非常有用。文件作用域的静态变量在程序的整个运行期间都存在,且在程序开始运行时初始化。 另外,在.c文件,如果将函数声明为static,则该函数将具有文件作用域,只能在当前.c文件使用。这意味着其他文件无法直接调用或访问该函数。通过将函数声明为static,可以隐藏函数的实现细节,提高代码的封装性。 综上所述,static关键字可以用于控制变量和函数的作用域,通常在.h文件避免使用static来声明变量,在.c文件可以使用static来定义全局或局部变量,并且可以将函数声明为static来隐藏函数的实现细节。 ### 回答3: 在.c和.h文件,static关键字可以用于函数和变量的声明和定义上。 对于函数,在.c文件使用static关键字声明一个局部函数,该函数仅在当前文件可见,不能被其他文件调用。这种方法也称为“静态函数”。在.h文件不需要使用static关键字声明函数,因为.h文件是用来声明和定义公共函数的。 对于变量,在.c文件使用static关键字声明一个静态变量,该变量只能在当前文件访问,其他文件无法访问。这样可以避免命名冲突并增加变量的安全性。在.h文件一般不会使用static关键字声明变量,因为.h文件是用来声明公共变量的。 总结来说,static关键字在.c文件用于声明和定义局部函数和局部变量,这些函数和变量只在当前文件可见。而在.h文件,不需要使用static关键字声明函数和变量,因为.h文件是用来声明和定义公共函数和变量的,可以被其他文件调用和访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值