关于extern关键字的疑惑

问题描述:

根据《C和指针》P47页

如果一个变量声明于代码块内部,在它前面添加extern关键字将使它所引用的时全局变量而非局部变量。

那么,在main函数声明一个extern修饰的变量,该变量也应该能在其他函数中使用,例如:
示例程序

但是,编译出错,提示:图片说明

是不是我的理解出了偏差?http://ask.****.net/#

extern int n只是声明该变量,需要在某个地方定义该变量。
而且如果想在func函数中使用此变量,必须在文件头部定义此变量。
你的例子中没有定义语句, 你可以尝试下在main函数中直接打印n,也会报错的。

正确的写法如下:

 #include <stdio.h>

int n;//此外为定义语句

void func(void)
{
    extern int n;//声明语句
    printf("%d",n);
}

int main()
{
    n = 12345;
    func();
    return 0;
}

这个可能是理解extern的最好文章