对于也在同一 C 文件中定义的变量,关键字 "extern" 是否存在冲突?

Is there a conflict with keyword "extern" for a variable which is also defined in the same C file?

如果我在 file1.c 中定义一个全局变量并在同一个文件中使用 'extern' 声明它,这是错误还是可以接受?

file1.c:

extern int x;

int x;

我还将在另一个文件中使用 'extern' 声明它,我将在其中使用它。

file2.c:

extern int x;

这是correct/acceptable吗?

extern是C语言中的关键字,用于声明一个全局变量,该变量是一个没有分配任何内存的变量。它用于在头文件中声明变量和函数。 extern 可以跨 C files 使用访问变量。

定义初始化变量或类型(它可以是一个结构或任何其他有效的 c 类型),定义 变量意味着在 c file 中为变量分配所需的内存,作为 global(此变量的范围是文件本身)和你 expandextend 它的范围通过外部它在 h file 或更准确你 declare 它在 h file声明一个变量的意思是编译器知道这个变量存在但是没有分配内存或数据给它。你可以声明它多次!)主要规则是extern 只能在头文件中使用。

例如:

在file1.c

int g_my_global = 0;

在file1.h

extern int g_my_global ;

现在每个头文件或 c 文件都包含您的 file1.h 将能够访问 g_my_global

在file2.c

#include "file1.h"
....
/*use g_my_global */  
g_my_global  = 10;

这或多或少正是它的本意。
extern 与其说是“将在与此不同的文件中定义”,不如说是“将在一个代码文件中定义,不一定是这个”。
对于奖励积分,将声明(带有 extern 的行)放入 header 并将其包含到两个代码文件中,一个带有定义,即没有 extern 的行,另一个一.
在所有代码文件的总数中始终只有一个定义行。这样您就可以避免重新定义问题,同时确保不会在多个代码文件中得到不一致的声明。 (考虑维护您的代码,这可能需要更改变量的定义和声明。)
也就是说,尽量避免使用全局变量。