extern的用法C语言
‘壹’ c语言中,extern关键字怎么使用最好解释清楚一点。
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。
如果你定义A.cpp和B.cpp中都定义了全局变量i。那么分别编译,都可以通过,但是链接时就会报错。
B.obj : error LNK2005: "int i" (?i@@3HA) already defined in A.obj
反之,如果我们希望A.cpp和B.cpp中使用的i是同一个i。也就是两个文件,共同使用同一个全局变量。如果我们不在B.cpp中定义i。那么编译时就会报错,提示
error C2065: 'i' : undeclared identifier
如果我们定义i就会出现上面所说的错误。
于是,我们需要extern关键字。告诉编译器。这个i我们在别的模块中定义过了。你要编译的话,取别的模块找一找。这样程序就能够自动去A.cpp中寻找i的定义。并且让它在B.cpp中可以被使用。
‘贰’ C语言 extern
在C语言中,变量和函数都有数据类型和存储类型两个属性,因此变量定义的一般形式是 {存储类型 数据类型 变量名}
C语言种提供了以下四种不同的存储类型
那么我们所说的extern就是存储类型的一种。extern修饰的变量存储位置在全局静态存储区。
标准的定义格式: extern 类型名 变量名;
通俗来说,如果使用extern修饰了一个变量或者函数,那么这个函数或者变量就变成了全局变量,在除定义该变量or函数的文件外仍然有效。不过需要注意的是,使用extern进行修饰是对该变量or函数进行声明,并没有分配内存。
如果在a.c中需要引用b.c中的int i,那么可以在a.c中使用extern int i进行声明。并且,能够被其他模块以extern修饰符引用的变量通常是全局变量。并且extern int i可以被放在a.c中的任何位置,区别只是在a.c中作用域的问题。
从本质上来说,并没有什么区别。函数名字本质上是一个指向二进制块开头处的指针。如果a.c中需要引用b.c中的函数,如b.c中原型是int fun(int mu),那么在a.c中声明extern int fun(int mu)那么就可以在a.c中用fun做事。
但是对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。
那么使用extern和包含头文件来引用函数有什么区别如下:
① 使用extern的引用比包含头文件要简介的多。extern使用直截了当,引用哪个函数直接extern进行声明即可。这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。
② include本质上是把include进来的这个文件原封不动的搬到当前文件中
a.c
b.c
‘叁’ extern在c语言中是什么意思
extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()

相关内容:
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
‘肆’ extern在c语言中是什么意思
是一个修饰符。
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。

‘伍’ c语言中的extern怎么用
extern在c中就是个外部申明,因为C是先申明再使用,当你想调用的变量或者函数不在你的模块当中,你可以使用外部申明。在使用外部申明的时候要特别注意,因为这只是个申明,并不是实体,当出现声明和实体不符的时候,编译器是不会管的,链接后就可能出现错误。比如你的实体是 int sample( int x ) ;而你在申明的时候是extern int sample( void ) ; 所以我不喜欢这种方式去声明。特别是多个人合作项目的时候,这种方法往往导致的结果很难去debug。即使是别人写好提供给你的,那他在修改了函数或者变量的类型,参数,往往会忘记修改给你的申明。
extern 还有个作用就是当你C和C++混用的时候,比如在C++中要使用C, 那么就要告诉编译器,你这段代码使用的是C,需要用C的编译器去编译,那可以使用extern "C" { .........} 否则编译会有问题
‘陆’ c语言extern的用法
extern一般用于跨文件的全局变量上。
如果只是想在函数内部给a赋值,完全不需要用到extern。传递引用就可以了。
例如
main()
{
int
a;
num(a);
printf("%d",
a);
}
int
num(int
&b)
{
b
=
3;
}
或者传递指针,或者使用返回值
‘柒’ C语言的extern用法
int iExtern = 0;
int main()
{
extern int iExtern;
printf("%d\n", iExtern);
return 0;
}
‘捌’ c语言中的extern是什么,有什么作用啊
extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()

添加了extern “C”链接指示后,上面的代码就能够正常运行了。
‘玖’ C语言中 extern 的用法,最好有示例,概念少说点
你好!
extern
用于扩展定义的全局变量的作用域,一般定义的全局变量的作用域为定义的位置起到函数结束,当要在定义全局变量的位置之前或其他源文件中引用该全局变量时,就需要在使用的函数中或源文件中用extern来扩展该全局变量的作用域,如:
#include
main()
{int
num(int
x);
int
b=3,c;
c=num(b);
printf("%d",c);
}
int
num(int
x)
{extern
int
a;
int
y;
y=a+x;
return
y;
}
int
a=2;
另外同理如果在定义函数时,在函数的首部的最左端加extern,则此函数是外部函数,可供其它文件调用。
如果对你有帮助,望采纳。
‘拾’ C语言 函数声明前extern的用法
个人看法,仅供参考。
(1)别的就是指“这一个”以外的;C盘定义,D盘调用,原则上可以,但是麻烦,写程序应该越简单越好,不提倡这样做;“别的”原则上没有限定几层,但是最好放在同一个文件夹,原因也说了,分开放麻烦。
(2)作用相同,不完全等价。区别在哪呢?include “*.h”
int f();把“*.h”里的所有东西都搬过来(除了f()之外可能还有其他的),那么肯定包含有f();而extern int f();表示你明确知道你要调用的是“*.h”里的f()这个函数,其它你都不需要。
“这么说,如果所有外部函数声明时都加上extern就不需要include “*.h”头文件了?”是的,但是你想想,如果你所有外部函数都要用到的话,你自己手动给所有函数加上extern还是直接一个include “*.h”哪个更方便呢
