Where can I declare global variable in c program , whether in header or source file
嗨,我是一个C++开发者,现在我正在做C编程。
我的问题是,在C程序中,哪个地方更好地声明全局变量。头文件或源文件(如果我的全局变量未在其他文件中使用)?
我希望这个变量像C++中的私有变量一样。
不应将全局非常量变量放在任何位置。与
例外情况是
在需要文件范围变量的情况下,它们应该在.c文件中声明,并且始终作为
还要注意C标准未来语言方向:
Declaring an identifier with internal linkage at file scope without
the static storage class specifier is an obsolescent feature.
因此,如果不使用
假设您的变量是全局变量和非静态变量。
您需要在头文件中声明它。我们对此使用
堆栈溢出.h:
1 2 3 4 5 6 | #ifndef STACHOVERFLOW_H #define STACHOVERFLOW_H extern int my_var; #ifndef |
然后在源文件中初始化它。(如果要提供初始化值,则禁止使用关键字
栈溢出
1 2 3 | #include"stackoverflow.h" int my_var = 50; |
不要将初始化值放在头中,否则如果头至少使用两次,则会出现链接器错误。
现在您可以在任何其他模块中使用您的变量,方法是包含头部。
主C
1 2 3 4 5 6 7 8 9 | #include <stdio.h> #include"stackoverflow.h" int main() { printf("my_var = %d ", my_var); return 0; } |
在"stackoverflow.c"中包含头"stackoverflow.h"是一种确保源文件中的定义与头文件中的声明匹配的方法。这允许在编译时立即出现错误,而不是有时出现神秘的链接器错误。
编辑:这根本不是使变量"私有"的方法。必须使用静态变量使其成为"私有"。见R sahu的答案
在C程序中,哪个地方更适合声明全局变量
答:在源文件(*.c)中。
假设场景类似,我在头文件中声明了一个变量。我把这个头包含在两个不同的.c文件中。在编译的宏扩展步骤之后,这两个文件将具有相同名称的全局变量。因此,它将在链接期间抛出一个错误,比如变量的多个声明。
结论:
将所有全局变量声明保存在.c文件中,如果在其他文件中不需要,则将其作为
如果需要从其他文件访问,在相应的头文件中添加该变量的
如果您打算在多个.c文件中使用全局变量,最好在.h文件中声明它们。但是,如果希望保持变量如EDCOX1×7的C++类中的成员数据,最好通过函数提供对全局数据的访问。
而不是
1 | extern int foo; |
使用
1 2 | int getFoo(); void setFoo(int); |
这种类型模仿类的成员变量的
如果您希望它是全局的(外部链接),您应该将它放在.h文件中。我认为这是最好的做法之一:
公共报头
1 2 3 4 5 6 7 | #ifdef YOUR_SOURCE #define EXTERN #else #define EXTERN extern #endif EXTERN int global_var; |
YouSux.c
1 2 3 | //your source makes definition for global_var #define YOUR_SOURCE #include <public_header.h> |
其他来源
1 | #include <public_header.h> //other sources make declaration for global_var |
如果您希望它是私有的(内部链接),我认为最好的解决方案就是在源文件中正确地定义它,而不是在头文件中,以防止头文件被另一个源包含,然后使其混淆。
你的简历
1 | static int private_var; |
一般来说,您可以在源文件中定义变量,如