【发布时间】:2017-03-12 08:40:46
【问题描述】:
当我遇到这种奇怪的行为时,我正在使用 extern 关键字 in C。
我有两个文件:
file1.c
#include<stdio.h>
int main()
{
extern int a;
a=10;
printf("%d",a);
return 0;
}
file2.c
const int a=100;
当我将这些文件一起编译时,没有错误或警告,当我运行它们时,输出为10。我原以为编译器应该在a=10; 行报告错误。
此外,如果我将 file2.c 的内容更改为
const int a;
也就是说,如果我删除全局常量变量a的初始化,然后编译文件,仍然没有错误或警告,但是当我运行它们时,就会发生Segmentation Fault。
为什么会出现这种现象?它是否被归类为未定义的行为?这是编译器还是机器相关的?
PS:我见过很多与此相关的问题,但要么是针对 C++ 的,要么只讨论 extern。
【问题讨论】:
-
这是一个非常好的答案,但它没有回答我的问题。
标签: c constants extern linkage