网站开发的书籍,搜索引擎营销的作用,如何攻克网站,自建微网站服务器版权声明#xff1a;本文为博主转载文章#xff0c;遵循 CC 4.0 BY-SA 版权协议#xff0c;转载请附上原文出处链接和本声明。
原文链接#xff1a;https://blog.csdn.net/mountzf/article/details/51767353
最近遇到了变量重复包含的问题#xff0c;才发现自己有好多知…
版权声明本文为博主转载文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。
原文链接https://blog.csdn.net/mountzf/article/details/51767353
最近遇到了变量重复包含的问题才发现自己有好多知识已经模糊了真惭愧。首先说下头文件其实头文件对计算机而言没什么作用她只是在预编译时在#include的地方展开一下没别的意义了头文件主要作用有两个一是把很多其他文件需要重复使用的函数变量等在此声明在需要的地方include二是给使用你函数文件的人看的。那既然是说明那么头文件里面放的自然就是关于函数变量类的“声明”了。记着是“声明”不是“定义”。 那么大家知道声明和定义的区别。所以最好不要在头文件里定义什么东西。比如全局变量
/*xx头文件*/
#ifndef _XX_头文件.H
#define _XX_头文件.H
int A;
#endif那么很糟糕的是这里的int A是个全局变量的定义如果这个头文件被多次引用的话你的A会被重复定义。 变量的定义为变量分配存储空间同时指明变量的类型和名字。另外变量的初始化就是在变量的定义出给出值。 变量的声明它主要向程序声明变量的类型和名字。定义也是声明这是许多人搞不清楚的地方那既然变量的定义就是声明为啥还要再多出来个变量的声明这个概念直接就用变量的定义不是就可以了 其实不然C中有个关键字是用来声明变量的它是extern。它声明一个变量却不定义它即不在给它一个存储空间。要在包含该文件的文件中使用此变量应该声明全局变量“extern int A”。
头文件中变量如果没有初始化就是声明初始化了就是定义此时被包含之后会发生重复定义的错误。全局变量的定义宜放在某个 .c 文件中而 .h 文件里写的是变量的声明。头文件应用于声明而不是用于定义。
其实C标准并没有规定头文件中不能定义 变量只不过如果在头文件中定义变量而该头文件又被多次包含的话会造成变量的重新定义。这和头文件中的函数声明不同因为函数在头文件中仅仅是声明声明可以有多个但是无论是函数还是变量定义都只能有一个否则就会发生重复定义的错误。
并不是所有的变量都能用extern声明只有全局变量并且没有被static 声明的变量才能声明为extern. 所以如果你不想自己源文件中全局的变量被其他文件引用你就可以给变量加上static声明。
非const变量默认为extern const变量默认为文件的局部变量。而const变量如果想要在其他文件里被访问必须显示的指定它为extern。如果const对象在编译时可以确定其值可以将其放在头文件中定义。这么做是有原因的——const对象默认情况下是定义该变量的文件的局部变量这样即使此头文件被多个包含都不会在包含这些文件中重复定义此变量所有对于这个const对象的引用全都指向在头文件中定义的对象。如果在const对象定义的时候声明externconst对象就变得和普通非const对象一样从而失去此特性非const对象的默认属性为extern。
所以总结如下
如果是要定义全局变量那么在头文件中用extern关键字声明然后在另一个.cpp文件中定义如果是要声明一个不想被其他文件使用、只能被本文件使用的变量可以用static关键字在头文件中进行定义如果所要定义的变量为局部变量并且其值在编译时就已经可以确定就可以用const关键词在头文件中进行定义。
祝枫 2016年6月27日于深圳