首页编程extern?extern在c语言中是什么意思

extern?extern在c语言中是什么意思

编程之家 2023-11-02 206次浏览

大家好,如果您还对extern不太了解,没有关系,今天就由本站为大家分享extern的知识,包括extern在c语言中是什么意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

extern?extern在c语言中是什么意思

c语言中extern的意思是什么

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。

extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:

文档A.cpp调用a.c里面的变量i和函数callme()

拓展资料

1、可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。

下面是一组函数,其中f()函数重载了:

f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:

extern?extern在c语言中是什么意思

2、C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。

为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern“C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。

添加了extern“C”链接指示后,上面的代码就能够正常运行了。

extern在c语言中是什么意思

是一个修饰符。

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。

extern?extern在c语言中是什么意思

可以通过把原函数名与参数信息结合,产生一个独特的内部名字:

这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。

下面是一组函数,其中f()函数重载了:

f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:

extern的意思是什么

为不确定的外部符号,如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。意思是:没有找到这个函数的实现。

连接错,这个_save_ts肯定是声明,如果_save_ts是一个函数的话,可能是你没有把.c或者.cpp文件加入工程。如果是一个全局变量,可能是你没有在.c或者.cpp文件中定义这个变量。

解决方法:

检查该函数的实现部分是否存在或包含该函数的lib文件是否正确的链接进代码中,查明错误后修正即可通过链接。

扩展资料

这个函数的.h文件格式如下:

1.在keil编译器中,extern这个关键字即使不声明,编译器也不会报错,且程序运行良好,但不保证使用其它编译器也如此。强烈建议加上,养成良好的编程规范。

2..c文件中的函数只有其它模块使用时才会出现在.h文件中,像本地延时函数static void delay(uint us)即使出现在.h文件中也是在做无用功,因为其它模块根本不去调用它,实际上也调用不了它(static关键字的限制作用)。

3.注意本句最后一定要加分号”;”,相信有不少同学遇到过这个奇怪的编译器报错: error C132:'xxxx': not in formal parameter list,这个错误其实是.h的函数声明的最后少了分号的缘故。

参考资料来源:百度百科-lnk2001

C语言中extern的意思是什么

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。

extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:

文档A.cpp调用a.c里面的变量i和函数callme()

拓展资料

1、可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。

下面是一组函数,其中f()函数重载了:

f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:

2、C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。

为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern“C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。

添加了extern“C”链接指示后,上面的代码就能够正常运行了。

extern和extern在c语言中是什么意思的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

对数函数求导,对数的导数公式是什么 景安vps,景安vps和阿里云哪个好。。正在纠结中