c头文件中定义变量,程序中有些变量在头文件中声明在c文件中定义使用 有些又直接在c文

1,程序中有些变量在头文件中声明在c文件中定义使用 有些又直接在c文区别都没什么 。在头文件中声明是为了可以重复使用因为unsigned char task_delay[max_task];是在os.c中定义的,别的地方使用os.h时,并不知道这个全局变量的情况 , 因此os.h中用extern 来说明该变量(不是定义)的类型,等到编译后链接时就可以解决几乎没区别 。只要你在C文件中引用了相应的头文件就可以在C文件中使用了 。【c头文件中定义变量,程序中有些变量在头文件中声明在c文件中定义使用 有些又直接在c文】
2,C中头文件的设置 全局变量publicextern类型 变量就OK了c文件在.h头文件中定义一个变量,在.cpp中#include标明那个头文件,这样就能在.cpp中直接用那个变量 。进入所在的头文件 直接修改前边加一个:public 如:publicint aa ;
3,C语言定义变量小问题全局变量只是一个变量,宏定义,只是字符的替换宏定义语句只是替换字符 。在编译的时候,通过查找替换的方便,用定义的字符串替换掉使用宠的字符串首先, 尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次 。定义是分配空间并赋初值(如果有) 的声明 。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可 。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性 。这条规则提供了高度的可移植性: 它和ANSI C 标准一致, 同时也兼容大多数ANSI 前的编译器和连接器 。Unix 编译器和连接器通常使用“通用模式” 允许多重定义, 只要保证最多对一处进行初始化就可以了; ANSI C 标准称这种行为为“公共扩展”, 没有语带双关的意思 。可以使用预处理技巧来使类似DEFINE(int, i);的语句在一个头文件中只出现一次, 然后根据某个宏的设定在需要的时候转化成定义或声明 。但不清楚这样的麻烦是否值得 。如果希望让编译器检查声明的一致性, 一定要把全局声明放到头文件中 。特别是, 永远不要把外部函数的原型放到.c 文件中: 通常它与定义的一致性不能得到检查, 而矛盾的原型比不用还糟糕 。
4,C头文件中定义变量首先,局部变量不能共享 。然后你改成如下,既可以了 。#ifndef FAA_H #define FAA_H #include int a; void pp(); #endif //mh.cpp文件里 #include #include "faa.h" using namespace std; int main() pp(); coutreturn 0; } //mh2.cpp文件 #include"faa.h" void pp() a=1000; }extern int a只能定义一次extern!你把mh2.cpp里的 extern int a;改成int a;就可以了1、记?。?尽量不要在.c/.cpp文件中定义变量,而只能是声明变量 。即将如下两句放在windowinit.cpp中 。/* variables */int width = 640;int height = 480;2、在windowinit.h中声明这两个变量:/* variables */extern int width;extern int height;然后就不会重定义了 。你声明在头文件中,头文件在预编译的时候,是会被展开在.cpp文件中的,这样两个cpp文件都定义了这两个变量 , 肯定会提示你重定义了 。5,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 。所以这种情况下变量的作用域也是整个项目 。需要注意的是,这种形式一旦在超过一个源文件中引用该头文件,则会按照在不同文件中定义同名全局变量处理,这时会编译出错 , 自然也就没有作用域的说法了 。程序中出现该变量时会自动应用你定义的值头文件中定义的变量是全局变量,在整个main函数过程中都可以调用 。而函数体内的变量可称之为局部变量只能在该函数体内使用 。声明新的类型名来代替原有的类型名比如,typedef intINTERGER;或typedef floatREAL;相当于用INTERGER来代表int类型,用REAL来代表float习惯上把用typedef声明的类型用大写字母表示那只是建议,并不是绝对的通常情况头文件是只存放声明,而.cpp文件存放定义但也有例外,比如模板类 。如果头文件中存放变量的定义,而其他多个cpp文件包含了这个头文件,可能会导致该变量被重复定义而出现链接错误头文件中变量是全局变量,是你使用整个main函数过程中都可以调用的!变量的作用范围看位置,在函数体内的只能作用在该函数体内 。程序设计序言书上都有

    推荐阅读