c语言中extern的意思是什么?? C语言中extern在函数声明中是什么意思?

c\u8bed\u8a00\u4e2dextern\u662f\u4ec0\u4e48\u610f\u601d?

\u5f53\u4f7f\u7528extern\u505a\u4fee\u9970\u7684\u65f6\u5019\uff0c\u6b64\u53d8\u91cf\u5c31\u53ef\u4ee5\u5728\u5176\u4ed6\u7684\u6e90\u6587\u4ef6\u91cc\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\uff0c\u5f53\u7136\u524d\u63d0\u662f\u5df2\u7ecf\u5305\u542b\u4e86\u8fd9\u4e2a\u53d8\u91cf\u6240\u5728\u7684\u5934\u6587\u4ef6

\u5b83\u53ef\u4ee5\u7528\u4f5c\u4e00\u79cd\u683c\u5f0f\u4e0a\u7684\u63d0\u793a\u8868\u660e\u51fd\u6570\u7684\u5b9a\u4e49\u53ef\u80fd\u5728\u53e6\u4e00\u4e2a\u6e90\u6587\u4ef6\u4e2d, \u4f46\u5728 extern int f();\u548c int f();\u4e4b\u95f4\u5e76\u6ca1\u6709\u5b9e\u8d28\u7684\u533a\u522b\u3002

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(程序员可以不加,但编译器默认加上)

若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下

例如 #include "my_Fun.c"
extern int b;//b是在my_Fun.c中声明了的一个全局变量

这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)

这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了

include是把整个都加载其中,包括文件里的所有的函数和变量。而采用extern只需要把需要的变量引用进来。这样可以保证执行效率,及资源节约!

我只知道C++兼容C语言的时候用extern其他情况还没研究。

extern 是声明。在链接时链接源函数体。

  • C璇█涓璭xtern鐨鐢ㄦ硶
    绛旓細鍙兘闇瑕佷娇鐢╡xtern "C"杩涜閾炬帴鎸囧畾锛屼互淇濇寔鍑芥暟鍚嶇О鐨勫師鏍凤紝閬垮厤鍥燙++鐨勫悕绉板鐞嗗鑷撮摼鎺ュけ璐ャ傛荤粨锛宔xtern鍦C璇█涓鎵紨鐫閾炬帴鍜屽0鏄庣殑瑙掕壊锛屼娇鐢ㄦ椂闇纭繚鍏朵笌瀹為檯瀹氫箟鐨勪竴鑷存э紝浠ラ伩鍏嶇紪璇戝拰杩愯鏃剁殑閿欒銆傚湪澶勭悊璺ㄦ枃浠跺拰涓嶅悓璇█鐜鐨勫嚱鏁拌皟鐢ㄦ椂锛岀悊瑙extern鐨鐢ㄦ硶鑷冲叧閲嶈銆
  • 鍦C璇█涓,extern鐨浣滅敤鏄粈涔?
    绛旓細鍛婅瘔缂栬瘧鍣ㄨ繖涓彉閲忔垨鑰呭嚱鏁鐨瀹氫箟涓嶅湪褰撳墠鐨勪唬鐮佷腑锛岀瓑鍒拌繛鎺ユ椂浠庡埆鐨勫湴鏂规壘锛屽鏋滄壘鍒颁簡灏卞彲浠ユ甯哥紪璇戯紝濡傛灉鎵句笉鍒板氨缂栬瘧澶辫触銆
  • 鍦C璇█涓,extern鐨浣滅敤鏄粈涔?
    绛旓細鍦ㄥ畾涔夊嚱鏁版椂锛屽鏋滄病鏈夊姞鍏抽敭瀛椻渟tatic鈥濓紝鎴栧啝浠ュ叧閿瓧鈥extern鈥濓紝琛ㄧず姝ゅ嚱鏁版槸澶栭儴鍑芥暟锛歔extern]鍑芥暟绫诲瀷 鍑芥暟鍚(鍑芥暟鍙傛暟琛){鈥︹ 璋冪敤澶栭儴鍑芥暟鏃讹紝闇瑕佸鍏惰繘琛岃鏄庯細[extern]鍑芥暟绫诲瀷 鍑芥暟鍚(鍙傛暟绫诲瀷琛)[锛屽嚱鏁板悕2(鍙傛暟绫诲瀷琛2)鈥︹锛沎妗堜緥]澶栭儴鍑芥暟搴旂敤銆傦紙1锛夋枃浠秏ainf.c main(){...
  • C璇█涓殑32涓叧閿瓧鍒嗗埆鏄粈涔堟剰鎬?
    绛旓細double 锛氬0鏄庡弻绮惧害娴偣鍨嬪彉閲忔垨鍑芥暟杩斿洖鍊肩被鍨嬶紱else 锛氭潯浠惰鍙ュ惁瀹氬垎鏀紙涓 if 杩炵敤锛夛紱enum 锛氬0鏄庢灇涓剧被鍨嬶紱extern锛氬0鏄庡彉閲忔垨鍑芥暟鏄湪鍏跺畠鏂囦欢鎴栨湰鏂囦欢鐨鍏朵粬浣嶇疆瀹氫箟锛沠loat锛氬0鏄庢诞鐐瑰瀷鍙橀噺鎴栧嚱鏁拌繑鍥炲肩被鍨嬶紱for锛氫竴绉嶅惊鐜鍙ワ紱goto锛氭棤鏉′欢璺宠浆璇彞锛沬f:鏉′欢璇彞锛沬nt锛 澹版槑鏁村瀷鍙橀噺鎴栧嚱鏁帮紱...
  • C璇█涓璭xtern鍏抽敭瀛楃殑浣滅敤
    绛旓細褰撻渶瑕佷娇鐢ㄨ妯″潡鏃讹紝鍙渶鍦ㄤ娇鐢ㄦ椂鍏蜂綋瀹氫箟涓涓嬪閮ㄥ彉閲忓嵆鍙傛瘮濡俶ain.c涓殑 g_X , g_Y 銆 涓嶈繃闇瑕佹敞鎰忥紝鐢变簬鐢 extern 寮曠敤澶栭儴鍙橀噺锛屽彲浠ュ湪寮曠敤鐨勬ā鍧楀唴淇敼鍙橀噺鐨勫硷紝鍥犳濡傛灉鏈夊涓枃浠跺悓鏃跺寮曠敤鐨勫彉閲忚繘琛屾搷浣滐紝骞朵笖鍙兘浼氫慨鏀硅鍙橀噺锛岄偅涔堝氨浼氬奖鍝嶅叾浠栨ā鍧楃殑浣跨敤銆傚洜姝ら渶瑕佹厧閲嶄娇鐢ㄣ傛荤粨 ...
  • 鍏充簬C璇█ extern 鐤戦棶
    绛旓細鍑芥暟榛樿鎯呭喌涓extern, 涓鑸嚱鏁伴兘涓衡滃閮ㄢ濆嚱鏁帮紝鎵浠ュ湪澹版槑鍑芥暟鏃朵笉鐢ㄥ姞"extern".濡傛灉鍦ㄤ竴涓枃浠朵腑澹版槑鍑芥暟鏃跺姞浜"static", 琛ㄧず杩欎釜鍑芥暟鍙湪杩欎釜鏂囦欢鍐呭彲瑙併傚叏灞*鍙橀噺*鍦*澹版槑*鏃朵竴瀹氳鍔"extern".
  • c璇█涓 #define鍜extern鐨鍖哄埆
    绛旓細define鐢ㄤ簬瀹氫箟甯搁噺 extern鐢ㄤ簬澶栭儴鍙橀噺鐨寮曠敤璇存槑锛屾瘮濡備綘鍦ㄥ彟澶栫殑鍦版柟(鍒殑.c鎴.h鏂囦欢涓)寮璁句簡涓叏灞鍙橀噺int x锛屽湪褰撳墠鏂囦欢涓渶瑕佸紩鐢ㄦ椂锛岀敤extern杩涜璇存槑锛岃繖鏍风紪璇戝櫒灏变笉浼氶噸鏂扮敵璇峰瓨鍌ㄥ尯浜嗐備緥濡傦細[func1.c]int x;...[mainfunc.c]extern int x;...[func2.c]extern int x;......
  • C璇█涓鍏ㄥ眬鍙橀噺璇存槑绗extern璇ュ浣曚娇鐢?
    绛旓細鍦C璇█涓锛extern鏄鍏ㄥ眬鍙橀噺澹版槑鐨勫叧閿瓧鍙澹版槑鍏ㄥ眬鍙橀噺灏遍粯璁 鍓嶉潰鍔爀xtern锛堢▼搴忓憳鍙互涓嶅姞锛屼絾缂栬瘧鍣ㄩ粯璁ゅ姞涓婏級鑻ユ湰鏂囦欢 寮曠敤鍒殑鏂囦欢涓殑鍏ㄥ眬鍙橀噺 涓瀹氳鍔犱笂extern 澹版槑涓涓嬶紝濡 鍦╢ile1.c涓畾涔夌殑鍏ㄥ眬鍙橀噺锛宖ile2.c涓兂瑕佷娇鐢ㄨ鍙橀噺锛屽嵆浣縤nclude浜嗗ご鏂囦欢锛屼絾鏄鏋滄病鏈塭xtern鍏抽敭瀛楁潵澹版槑鐨...
  • 鍗曠墖鏈C璇█,濡備綍浣跨敤extern
    绛旓細extern 鏄閮ㄥ紩鐢紝濡傛灉鏄湪鍚屼竴涓枃浠閲锛屼笉闇瑕侊紝濡傛灉鍙橀噺 鎴栧嚱鏁板畾涔夊湪鍙︿竴涓枃浠堕噷鎵嶉渶瑕併備綘鐪嬬湅鏄笉鏄繖绉嶆儏鍐点
  • C璇█涓鍏ㄥ眬鍙橀噺鐨勪綔鐢ㄨ寖鍥?鍙婂叏灞鍙橀噺鍜extern瀹氫箟鍙橀噺鐨勫尯鍒?
    绛旓細鍏ㄥ眬鍙橀噺鏄湪鏈枃浠朵腑鎵鏈夊嚱鏁伴兘鍙互浣跨敤鐨鍙橀噺锛屼繚瀛樺湪闈欐佸瓨鍌ㄥ尯锛屽鏋滆鍦ㄥ埆鐨勬枃浠朵腑浣跨敤杩欎釜鍙橀噺闇瑕佸姞涓extern鏉ュ0鏄庯紝杩欎釜鍙橀噺鏄湪鍒殑鏂囦欢涓畾涔夌殑鍏ㄥ眬鍙橀噺锛屽眬閮ㄥ彉閲忎笉鑳藉湪鍒殑鏂囦欢涓敤extern澹版槑
  • 扩展阅读:c语言extern的用法 ... c++中extern的用法 ... c语言extern说明 ... c语言中extern关键字 ... c语言函数默认为extern ... c语言extern怎么跨文件 ... extern用法举例 ... extern的使用方法 ... c语言extern最简单的编译 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网