在c程序中哪里可以声明全局变量,无论是在头文件还是源文件中

Bha*_*rya 3 c global-variables

大家好,我是一名 C++ 开发人员,现在正在做 C 编程。

我的问题是在c程序中哪个地方声明全局变量更好。标头或源文件(前提是我的全局变量未在其他文件中使用)?

我想要像 C++ 中的私有变量那样的变量。

jda*_*nay 5

假设您的变量是全局且非静态的。

您需要在头文件中声明它。extern我们为此使用关键字。正如评论中指出的,this 关键字不是必需的,但大多数 C 用户更喜欢在标头中使用它,这是一种约定。

堆栈溢出.h:

#ifndef STACHOVERFLOW_H
#define STACHOVERFLOW_H

extern int my_var;

#ifndef
Run Code Online (Sandbox Code Playgroud)

然后在源文件中初始化它。extern(如果要提供初始化值,则禁止使用关键字)。

堆栈溢出.c

#include "stackoverflow.h"

int my_var = 50;
Run Code Online (Sandbox Code Playgroud)

不要将初始化值放入标头中,否则如果标头至少使用两次,您将收到链接器错误。

现在,您可以通过包含标头在任何其他模块中使用您的变量。

主程序

#include <stdio.h>
#include "stackoverflow.h"

int main()
{
    printf("my_var = %d\n", my_var);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在“stackoverflow.c”中包含头文件“stackoverflow.h”是一种确保源文件中的定义与头文件中的声明匹配的方法。这允许在编译时出现错误,而不是有时出现神秘的链接器错误。

编辑:这根本不是使变量“私有”的方法。您必须使用静态变量使其成为“私有”。参见R Sahu 的回答