带有extern的变量声明与不带有extern的变量声明之间的差异

问题描述 投票:0回答:1

1.h

extern int a;

1.c

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

int main(){ 
 printf("%d\n", a);
 return 0;
}

2.c

#include "1.h"

int a = 6;

如果从extern中删除1.h并打印6,则此命令可以编译并正常运行(gcc 1.c 2.c)。我知道删除它可能会导致在每个翻译单元(目标文件)中定义a,但是这是什么问题呢?链接程序编译时没有错误,链接程序不是只是摆脱了链接吗?

c linker extern
1个回答
1
投票

此技术不符合C标准的字母和“一个定义规则”-这是正式未定义的行为:

© www.soinside.com 2019 - 2024. All rights reserved.