头文件可以定义变量吗|头文件中定义的全局变量和静态全局变量有区别吗

❶ 头文件里定义变量会预先占用内存空间

会占用空间头文件一般是要反复使用的,比如你的程序有多个.c文件组成,每个.c文件都可以包含头文件,如果头文件中定义变量,在多次编译头文件时,编译程序就会重复申请相同名称的变量,导致错误,所以不建议在头文件中定义变量。头文件一般定义的是函数调用规则以及常量、宏定义这些不怕重复编译的说明性内容。

❷ c++。可以在头文件中定义并初始化变量吗

可以。但是分两种,一种仅限头文件用,另一种是包含这个头文件的文件也可以用。第1种的定义方式:例子1-1: int a=0;例子1-2: node n={0,100}; // node 为用户自定义类型总结:第一种仅限头文件的定义和普通的变量定义方式一模一样。第2种的定义方式:例子2-1: extern int a;例子2-2: extern node a; // node 为用户自定义类型总结:第二中定义的方式在普通定义方法前加上"extern"即可望采纳!!

❸ 头文件中定义的全局变量和静态全局变量有区别吗

有,头文件中定义的全局变量在其他文件中只要包含其头文件就可以用静态全局变量只能在该文件使用

❹ C语言多文件编程中能在头文件中定义一个变量并给这个变量赋值吗

首先你说“定义”就有问题。定义只能定义一次,“声明”可以有多次。你在多文件使用到的头文件中“定义”肯定不对。不然会提示重复定义的错误

❺ c语言 中 为什么不将全局变量的定义放在头文件中

首先要说明什么是全局变量,c语言中全局变量一般是指定义在函数体外的变量。全局变量按可访问性可分为外部变量和内部变量。

内部变量是指使用了static关键字修饰的全局变量,它的可访问范围(作用域)被限定在本源文件所在的链接文件模块中,不能被其它文件模块引用。反之没有被static关键字修饰的全局变量则是外部变量,其它文件模块可以通过extern关键字引用该全局变量并访问。

要说明的是全局变量无论是内部变量还是外部变量,的存储类别都是静态的,也就是放到静态内存区域中,它编译链接阶段就已经分配好了固定的内存。

搞清楚上面的内容,就很容易得出若把全局变量放在头文件会有哪些问题;

一 对内部变量来说,每个include该头文件的文件模块中都会单独为这个内部变量分配静态内存空间,这个空间是相对独立的,是一种空间浪费,同时还失去了全局变量访问一致性的特点,实在没有什么意义。如果这个头文件只被一个模块使用,对于这个文件模块来说应该没啥问题。

二 对外部变量来讲,这个头文件被多个文件模块include的情况下,链接过程会报错,因为符号冲突,所有include这个头文件的模块都会有这个全局符号。在这个头文件仅仅只被一个模块include的时候可以正常使用。

经上分析得出要避免全局变量定义在头文件中,因为当这个头文件被多方include的时候会产生一些不必要的麻烦,就这么多。

全局变量作用域范围较广,被错误修改后排查定位问题比较困难,若非必要尽少使用。

下面说一下比较好的方式就是全局变量只定义在实现文件(.c,.m)中,对内部变量没啥说的它只在文件模块内部使用,对外部变量可以在该模块头文件中使用extern关键字修饰一下,这样其它文件模块只要直接include该头文件就可以使用模块中的外部变量了。

❻ C++中在头文件里定义的变量的作用范围是什么

头文件中变量是全局变量,是你使用整个main函数过程中都可以调用的!变量的作用范围看位置,在函数体内的只能作用在该函数体内。程序设计序言书上都有

❼ c++ 头文件为什么不能定义变量

多个文件都引用这个头文件,这样就属于这个变量重复定义了。但是c++中可以定义const的变量。


赞 (0)