头文件中的变量声明

Ori*_*ski 61 c header

如果我有一个可以在多个来源中使用的变量 - 在标题中声明它是一个好习惯吗?或者在.c文件中声明它并extern在其他文件中使用是否更好?

Mar*_*n B 102

您应该在头文件中声明该变量:

extern int x;
Run Code Online (Sandbox Code Playgroud)

然后在一个 C文件中定义它:

int x;
Run Code Online (Sandbox Code Playgroud)

在C中,定义和声明之间的区别在于定义为变量保留空间,而声明仅将变量引入符号表(并且会导致链接器在链接时间时查找它) .

  • ****都是声明!在文件范围,第二个不是(完整)定义,而是一个_tentative definition_. (3认同)

Hen*_*man 34

您可以(应该)extern在头文件中声明它,并在正好1 .c文件中定义它.

请注意,该.c文件也应使用标头,标准模式如下所示:

// file.h
extern int x;  // declaration

// file.c
#include "file.h"
int x = 1;    // definition and re-declaration
Run Code Online (Sandbox Code Playgroud)


Vic*_*cky 11

如果你声明它

int x;
Run Code Online (Sandbox Code Playgroud)

在一个头文件中,然后包含在多个地方,你最终会得到多个x实例(可能会编译或链接问题).

解决这个问题的正确方法是让头文件说出来

extern int x; /* declared in foo.c */
Run Code Online (Sandbox Code Playgroud)

然后在foo.c中你可以说

int x; /* exported in foo.h */
Run Code Online (Sandbox Code Playgroud)

您可以在任意多个位置包含头文件.