为什么要在头文件中进行变量声明
Ⅰ C++中在头文件里定义的变量的作用范围是什么
根据头文件中变量的定义形式,作用范围有所不同,有如下几种情况:
1 在头文件中定义静态变量,如
static TYPE var = init_value;
其中= init_value部分可以省略。
等效于在每个引用该头文件的源文件中,定义一个变量名为var, 类型为TYPE的静态全局变量。每个文件中的var变量均归属于本源文件,各文件中的互不相同。
作用域为引用头文件的源文件范围内。
2 在头文件中定义变量,但是不带初始化值。
TYPE var;
这种情况下,相当于定义了一个全局变量var, 同时在所有引用该头文件的源文件中声明。
其作用域为整个项目的所有源文件。
在引用了该头文件的源文件中可以直接使用var, 在没有引用该头文件的源文件中,可以通过
extern TYPE var;
进行声明,从而使用var。
3 在头文件中定义了带初始化值的变量。
TYPE var = init_value;
当项目中,只有一个源文件中引用了该头文件时,等同于在源文件中定义了这个全局变量,可在该文件中使用var。 在其它源文件中可以通过
extern TYPE var;
进行声明,从而使用var。所以这种情况下变量的作用域也是整个项目。
需要注意的是,这种形式一旦在超过一个源文件中引用该头文件,则会按照在不同文件中定义同名全局变量处理,这时会编译出错,自然也就没有作用域的说法了。
Ⅱ 头文件中声明变量
变量和函数声明都是正确的
#include <stdio.h>放在main.cpp里面
#include <stdio.h>是一个已经定义好的库文件,放在main.cpp里面表示你在主函数里面用到这个库的函数,所以不需要放在头文件里面。
Ⅲ c语言中不是说静态全局变量的作用域是在本文件中,但是为什么在头文件中定义了静态全局变量
你说的对的,但是没有深刻理解,你将变量定义放在头文件中,使用时#include,在C预处理时相当于直接将其内容到*.c文件中,就相当于在每个*.c 文件中 加上了 static int x = ...; 这难道还是同一个变量吗?这里就体现了static的防止变量重名的作用。
当然可以了!地址当然不一样了!
假如在1.c 中 全局 static int a = 1; 在 2.c中当然不可调用,这就是你说的作用域的问题。
一般的话不会再头文件中定义变量的。头文件中存放声明 结构体原型、宏定义等,不会占用空间。
static 加在函数前也是这个道理。
还有 假如你1.c中的fun函数调用了 static a , 但是函数前没有加上static那么可以直接在
2.c中去调用 fun函数。
这么说,你明白了嘛?
Ⅳ C++书上写的是不能把变量定义在头文件中,头文件只能用来声明,为什么MFC中把变量都定义在头文件中
那只是建议,并不是绝对的
通常情况头文件是只存放声明,而.cpp文件存放定义
但也有例外,比如模板类。
如果头文件中存放变量的定义,而其他多个cpp文件包含了这个头文件,可能会导致该变量被重复定义而出现链接错误
Ⅳ C语言中,声明变量和初始化变量有什么作用
c语言中,变量只有先声明,才能使用,这样避免编程时产生不必要的错误,一位不同类型变量的存储格式和长度都不同,所以字节长度不同,声明变量可以让计算机知道你更需要用什么样的格式存储变量,从而高效稳定地运行程序。
C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
(5)为什么要在头文件中进行变量声明扩展阅读:
C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。
与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。
Ⅵ 在程序中我们使用一个变量前为什么要进行声明
为了叫系统承认这个和知道这个变量的基本状态,以便下面运用\运算.否则就是非法的