Rüp*_*ure 3 c scope external linkage
这看起来非常微不足道,但对以下行为的一个有点严格的解释将有助于我理解很多.extern所以我将非常感谢你的答案.
在下面的示例程序中,我在函数()中声明了一个extern变量.现在如果我在文件范围内定义变量并将其赋值给它,那么程序工作正常并打印出来.但是如果我在里面定义变量在之后,期望声明链接到它,然后它失败并给出以下错误:xmain()main()88xmain()printf()extern
test.c||In function 'main':|
test.c|7|error: declaration of 'x' with no linkage follows extern declaration|
test.c|5|note: previous declaration of 'x' was here|
||=== Build finished: 1 errors, 0 warnings ===|
#include<stdio.h>
int main()
{
extern int x;
printf("%d",x);
int x=8; //This causes error
}
//int x=8; //This definition works fine when activated
Run Code Online (Sandbox Code Playgroud)
我在代码中只看到一个错误,声明int x=8意味着我们x再次声明为auto存储类的变量.我不明白.你能告诉我以下内容:
1)为什么我们允许在函数内声明一个extern变量,没有任何警告或错误?如果有效,它究竟是什么意思?
2)由于我们宣布x为extern在函数内部,并没有表现出错误的,为什么后来这个声明不链接到函数内部的变量的定义,但看起来外,当变量定义之外?冲突存储类声明auto-vs-extern的原因是什么?
extern变量声明是对编译器的一种承诺,即某个地方会有一个全局变量的定义.局部变量不符合对编译器的承诺的履行,因为它们对链接器是不可见的.从某种意义上说,extern声明类似于函数的前向声明:你对编译器说"我知道这个函数在那里,所以让我现在使用它,让链接器负责定位实际的实现".
| 归档时间: |
|
| 查看次数: |
3143 次 |
| 最近记录: |