C语言中如何定义全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何定义全局变量相关的知识,希望对你有一定的参考价值。

1、首先,我们可以在函数外面定义变量,就是全局变量。

2、局部变量可以与全局变量同样命名。

3、但是优先级是局部变量优先。

4、但是局部变量的生命周期是整个结构内。

5、全局变量是整个程序结束,才释放。

6、我们也可以为变量加上修饰符。

参考技术A 众所周知,全局变量在被定义后,系统会为全局变量分配内存并且它还可以被其他模块通过C语言中extern关键字调用。这样就必须在 xx.C 和xx.H 文件中定义。这种重复的定义很容易导致错误。 下面是只需用在头文件中定义一次就可以在别的模块使用的定义方法。格式: 定义全局宏。#ifdef xxx_GLOBALS#define xxx_EXT#else#define xxx_EXT extern#endif 上面位于.H 文件中,每个全局变量都加上了xxx_EXT的前缀,xxx代表模块的名字。该模块的.C文件中有以下定义:#define xxx_GLOBALS当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C文件时,xxx_GLOBAL没有定义,xxx_EXT被定义为extern,这样用户就可以调用外部全局变量。进阶:在abc.H:#ifdef abc_GLOBALS#define abc_EXT#else#define abc_EXT extern#endifabc_EXT unsigned int Ctr;同时,abc.H有中以下定义:#define abc_GLOBALS当编译器处理abc.C时,它使得头文件变成如下所示,因为abc_EXT被设置为空。unsigned int Ctr;这样编译器就会将这些全局变量分配在内存中。当编译器处理其他.C文件时,头文件变成了如下的样子,因为abc_GLOBAL没有定义,所以abc_EXT被定义为extern。extern unsigned int Ctr;在这种情况下,不产生内存分配,而任何 .C文件都可以使用这些变量。这样的就只需在 .H 文件中定义一次就可以了。本回答被提问者采纳 参考技术B 1、记住一条就够了:在函数之外定义的变量就是全局变量。用static修饰的变量可以是全局的,也可以是局部的,所以说“用static修饰的变量是全局变量”是错误的。用static修饰的变量的生命周期与全局变量一样,但可见性仍分全局和局部。
2、全局变量在整个c文件中都能使用,而局部变量在其作用域内才能使用,举个例子:

1
2
3
4
5
6
7
8
9
10
11

int f = 7;// 这个是全局变量
int myadd(int a, int b)

int c = a + b;// c是局部变量,只能在myadd中使用
return c;

int main(void)

printf("%d\n", c);// 因为c是myadd中定义的局部变量,这里会报错。
printf("%d\n", f);// f是全局变量,这句是正确的。
参考技术C

1、记住一条就够了:在函数之外定义的变量就是全局变量。用static修饰的变量可以是全局的,也可以是局部的,所以说“用static修饰的变量是全局变量”是错误的。用static修饰的变量的生命周期与全局变量一样,但可见性仍分全局和局部。

2、全局变量在整个c文件中都能使用,而局部变量在其作用域内才能使用,举个例子:

int f = 7;// 这个是全局变量
int myadd(int a, int b)

int c = a + b;// c是局部变量,只能在myadd中使用
return c;

int main(void)

printf("%d\\n", c);// 因为c是myadd中定义的局部变量,这里会报错。
printf("%d\\n", f);// f是全局变量,这句是正确的。

参考技术D

定义在函数体外部的变量叫全局变量,

要定义全局变量你只要把变量定义在

所有函数外部即可。

要注意的是,全局变量只对它定义位

置以下的函数可见。

#include<stdio.h> 

void f1();
void f2();
int y=100;
int main()


printf("%d\\n\\n",y);
//printf("%d\\n",x);这不可以读x,x对main()不可见 
f1();
f2();
return 0;



int x;
void f1()

x=200;
 

void f2()

printf("%d\\n",x);
printf("%d\\n",y);

c语言一个结构体如何在多个源文件里面调用?

c语言同一个结构体在多个源文件里面调用如何实现?
我尝试写在一个头文件里面,然后多个源文件同时调用这个同文件,结果编译报错LNK2005 重定义了

如何解决?

引用结构体有引用类型,和引用全局变量两种方式。
1、引用类型。
需要将结构体定义与头文件中(.h文件),然后在需要引用类型的源文件(.c)中,均引用该头文件,即可使用该类型。
2、引用全局变量。
要引用全局变量,需要先引用类型,之后在一个源文件中定义全局变量,在其它源文件中声明该全局变量,即可使用。
比如结构体为struct test, 定义全局变量为
struct test glabol_test;
在其它文件中,只需要
extern struct test globol_test;
即可在对应文件声明所在行之下进行调用。
参考技术A 头文件里用extern struct xxx; 其中一个.c文件里 struct xxx;
其他.c要用的话吧这个头文件包含进去。本回答被提问者采纳
参考技术B foo.h文件里面写
#ifndef _FOO_H_
#define _FOO_H_
struct foo

int date;
;
#endif
然后每一个需要这个结构体的文件都加头文件 foo.h追问

这个只能解决一个源文件多次调用头文件 不能解决多个源文件调用同一个头文件的问题

追答

我大大小小写了几年代码
不是第一次多个源文件调用同一个头文件的同一个结构体

你错 不是方法错

追问

可能这个结构体比较复杂吧,里边有函数实现

总之就是第二次调用要写extern,不然编译器会报错的

已经解决了...大一苦逼工科狗已跪

以上是关于C语言中如何定义全局变量的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,宏替换与定义全局变量的区别是啥?

怎么在汇编中引用c语言的全局变量

Keil中C语言模块化编程时全局变量、结构体处理细节

PHP中如何定义全局数组?

3. 在C语言程序中,在函数内部定义的变量称为全局变量。

C语言之在头文件中定义全局变量