我有一个在C:
中成功编译的单个文件的源代码#include <stdio.h>
int a;
unsigned char b = 'A';
extern int alpha;
int main() {
extern unsigned char b;
double a = 3.4;
{
extern a;
printf("%d %d\n", b, a+1);
}
return 0;
}
运行后,输出
65 1
有人可以告诉我为什么外部声明会捕获全局值而不是 double 本地值以及为什么 printf 语句打印全局值而不是当地人?
此外,我注意到如果我从
更改第3行的声明int a;
到
int a2;
我将从 extern a; 语句中收到错误消息。为什么不只使用作业 double a = 3.4; ?它并不像它必然是int。
答案 0 :(得分:1)
该行
extern a;
隐藏上一个声明。在声明它的范围结束之前,此声明优先于定义
double a = 3.4;
答案 1 :(得分:1)
它不一定是int。
实际上是。在声明中
extern a;
a
的(隐含)类型确实是int
。 C语言中没有任何特定类型的声明始终默认为int
。
此外,extern
声明不能引用局部变量(甚至是在同一函数中声明的变量)。