繁体   English   中英

关于 extern 关键字和多个源文件的混淆

[英]Confusion about the extern keyword and multiple source files

我试图完全理解 extern 是如何工作的,所以我创建了 3 个文件,其中两个是源文件,最后一个是 header 文件。 这是它们每个中包含的内容: testingfile1.c

#include <stdio.h>
#include "testingheader.h"
int main() {
    change();
    int my_extern;
    printf("\n%d", my_extern);
    return 0;

}

测试文件2.c:

#include <stdio.h>
#include "testingheader.h"
void change() {
    int my_extern;

    my_extern = 15;
    printf("%d", my_extern);
}

测试头文件.h:

#if !defined(TESTINGHEADER_H)
#define TESTINGHEADER_H

#include <stdio.h>
extern int my_extern;
void change();

#endif

这个程序的 output 是:15 0。但是,我认为由于 my_extern 是一个 extern int,如果你要更改为一个源文件中的值,它的值将在所有其他源文件中更改。 这不是 extern 的工作方式,还是我在代码本身做错了什么?

在这两种情况下删除int my_extern; 你有它,因为它们成为局部变量,恰好具有相同的名称my_extern

extern int my_extern; 只是意味着有一个名为my_extern的 int “在某处”。 因此,您必须在文件 scope 的某处声明int my_extern ,例如:

int my_extern = 0;

void change() {
    my_extern = 15;
    printf("%d", my_extern);
}

在 testingfile2.c 中, my_extern变量是 function 的本地变量,您看不到 extern 命令引用的全局my_extern 当然,您没有全局my_extern ,所以这是另一个问题。 如果您实际上尝试引用 extern 命令正在引用的全局my_extern ,您将收到 linker 错误。

问题是您要重新声明int my_extern; 在你的函数里面。 因此, C 将其视为与全局my_extern不同的变量。

语句extern int my_extern; 是一个名为my_extern的全局int将在某处声明的声明。 你没有这样做。 相反,您创建了本地my_extern变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM