C范围和外部使用

时间:2014-05-27 20:34:34

标签: c

我有一个在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。

2 个答案:

答案 0 :(得分:1)

该行

extern a; 

隐藏上一个声明。在声明它的范围结束之前,此声明优先于定义

double a = 3.4;

答案 1 :(得分:1)

  

它不一定是int。

实际上是。在声明中

extern a;

a的(隐含)类型确实是int。 C语言中没有任何特定类型的声明始终默认为int

此外,extern声明不能引用局部变量(甚至是在同一函数中声明的变量)。