我可以在另一个文件中使用 "int"而不是 "extern"int 吗?

标签 c

我读到,如果我想在另一个 C 文件中使用全局变量,我应该在数据类型前面加上访问说明符 extern,如下所示:

File One                             File Two
int x, y;                            extern int x, y;
char ch;                             extern char ch;
int main(void)                       void func22(void)
{                                     {
/* ... */                              x = y / 10;
}                                     }
void func1(void)                      void func23(void)
{                                     {
x = 123;                               y = 10;
}                                     }

并且错误地在文件二中我没有按原样声明 x, y。我将它们声明为 int xint y我等待编译器显示变量 x 和 y 重新定义的错误,但代码运行时没有任何错误。

例如:

文件一

#include <stdio.h>

int global = 1000;  /** declare global variable called 
                       global **/

int main(){

print();

return 0;
}

文件二

int global;   /** here I don't use the extern keyword **/

void print(void){

global = 100;

printf("\n global = %d",global);

return;

}

结果是:global = 100

程序编译和链接没有任何错误

所以我的问题是:是 extern说明符在这里是多余的?!

最佳答案

您不会收到任何错误,因为编译器不会检查外部变量的类型或是否存在。 在链接阶段,链接器在目标文件中搜索对名为 x(或 y)的符号的引用。

关于我可以在另一个文件中使用 "int"而不是 "extern"int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944617/

相关文章:

android - HTTP 服务器实现 : Mobile web browsers (e. g。 Android标准)停止加载页面资源

c - 在 C 程序之间共享变量值

php - 我可以将用 C 语言编写的 dll 与 PHP 一起使用吗?

c++ - 为什么不是我可以加载(打开)的所有 DLL 模块?

C,管道消息到子进程不工作。为什么?

c++ - 面向对象对嵌入式系统不利,为什么?

c - C 中的变量 auto

C 头文件和动态链接错误

从使用 __asm 定义的 ARM 函数调用 C 函数

c - 如何正确计算 C 中的单词、换行符和字符