c语言extern跟static可以一起用吗 C语言中 Static和 Extern 的具体用法,有例子最...

C\u8bed\u8a00\u91cc\u7684static\u548cextern\u7684\u4f5c\u7528\u662f\u4ec0\u4e48\uff1f

\u5047\u5982\u6709\u4e09\u4e2a\u6587\u4ef6\uff1aa.h, a.c, main.c
\u5728\u6587\u4ef6a.c\u4e2d\u5b9a\u4e49\u4e00\u4e2a\u5168\u5c40\u53d8\u91cf\u548c\u51fd\u6570\uff1a
int i = 213\uff1b
void print(void) { printf("print in a.c"); }
\u5728\u6587\u4ef6a.h\u4e2d\u58f0\u660e\u8fd9\u4e2a\u5168\u5c40\u53d8\u91cf\u548c\u51fd\u6570\uff1a
extern int i\uff1b// \u52a0extern\u58f0\u660e\u800c\u4e0d\u5b9a\u4e49\uff0c\u6307\u660e\u8fd9\u4e2a\u53d8\u91cf\u5728\u67d0\u5904\u5df2\u5b9a\u4e49\uff0c\u6b64\u5904\u53ea\u662f\u505a\u4e00\u4e2a\u8bf4\u660e
extern void printf(void); // \u51fd\u6570\u539f\u578b\u5373\u662f\u58f0\u660e\uff0c\u6240\u4ee5\u6b64\u5904\u53ef\u4ee5\u4e0d\u7528\u52a0extern\u660e\u786e\u8fd9\u662f\u58f0\u660e
\u5728\u6587\u4ef6main.c\u4e2d\uff1a
#include \u201ca.h\u201d
int main()
{

printf("%d\n", i); // \u76f4\u63a5\u4f7f\u7528i
print(); // \u76f4\u63a5\u8c03\u7528print()
}
---
\u5982\u679c\u5c06\u6587\u4ef6a.c\u4e2d\u76f8\u5173\u5b9a\u4e49\u6539\u4e3a
static int i = 213\uff1b
static void print(void) { printf("print in a.c"); }
\u6587\u4ef6a.h\u4e0emain.c\u4e2d\u5185\u5bb9\u4e0d\u53d8
\u6b64\u65f6\u7f16\u8bd1\u51fa\u9519\uff0c\u62a5\u544a\u627e\u4e0d\u5230print()\u51fd\u6570\uff0c\u627e\u4e0d\u5230i\uff0c\u8fd9\u662f\u56e0\u4e3astatic\u9650\u5236print()\u548ci\u53ea\u80fd\u5728a.c\u4e2d\u4f7f\u7528\u3002
===
\u5982\u679c\u7528static\u4fee\u9970\u5c40\u90e8\u53d8\u91cf\uff0c\u5219\u8be5\u5c40\u90e8\u53d8\u91cf\u5c06\u62e5\u6709\u5168\u5c40\u751f\u547d\u5468\u671f\uff0c\u5373\u5728\u7a0b\u5e8f\u6267\u884c\u671f\u95f4\u90fd\u5b58\u5728\uff0c\u4e14\u5176\u503c\u4e3a\u4e0a\u4e00\u6b21\u4f7f\u7528\u540e\u7684\u503c\u3002
int print(void)
{
static int i = 0;

printf("%d",i++);

}
\u4e0d\u52a0static\uff0c\u6bcf\u6b21\u8c03\u7528print()\uff0c\u8f93\u51fa\u7ed3\u679c\u90fd\u662f0
\u52a0\u4e0astatic\uff0c\u6bcf\u6b21\u8c03\u7528printf(), \u8f93\u51fa\u7ed3\u679c\u90fd\u4e0d\u540c\uff0c\u5373\uff1a0\uff0c1\uff0c2\uff0c3\u2026\u2026

//head file library.h#ifndef LIBRARY_H#define LIBRARY_hextern FILE* logfile; //declaring an extern file pointer/*other random codes*/#endif//end of head file

//source code main.c
#include
#include"library.h"
FILE* logfile; // declare the extern pointer is used in this file
int main()
{
logfile=fopen(...);
//main function
return 0;
}

//end of main.c


//source code backend.c
#include"libarary.h"

static FILE* logfile=fopen(...);


/*other random codes*/

//end of backend.c



\u5982\u4e0a\u6240\u8ff0\uff0cextern\u5728\u5934\u6587\u4ef6\u4e2d\u58f0\u660e\u4e00\u4e2a\u8de8\u6587\u4ef6\u7684\u5168\u5c40\u53d8\u91cf\uff0c\u6bcf\u4e00\u4e2a\u9700\u8981\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u7684\u6587\u4ef6\u90fd\u8981\u5355\u72ec\u58f0\u660e\uff08\u4e0d\u52a0extern\u518d\u58f0\u660e\u4e00\u904d\uff09

\u800cstatic\u7528\u4e8e\u58f0\u660e\u4e00\u4e2a\u9759\u6001\u53d8\u91cf\u3002\u9759\u6001\u53d8\u91cf\u4e0d\u80fd\u88ab\u5176\u4ed6\u6587\u4ef6\u8bbf\u95ee\uff0c\u56e0\u6b64\u53ef\u4ee5\u4e0e\u5176\u4ed6\u6587\u4ef6\u7684\u5168\u5c40\u53d8\u91cf\u540c\u540d\u3002\u53e6\u5916\u5982\u679c\u4e00\u4e2a\u53d8\u91cf\u5728\u6587\u4ef6\u4e2d\u88ab\u58f0\u660e\u4e3a\u9759\u6001\u53d8\u91cf\u4ee5\u540e\uff0c\u8be5\u6587\u4ef6\u4e0d\u80fd\u518d\u6709\u540c\u540d\u7684\u8de8\u6587\u4ef6\u5168\u5c40\u53d8\u91cf

不能。extern修饰全局变量和函数,被修饰的变量和函数可以在别的文件里使用。

而static修饰的变量和函数作用范围仅限于定义它的文件内部。
两者是冲突的。

不可以,static表示是本文件内的变量(在函数中的是静态变量)。
extern表示是其他文件定义的变量,显然两者是矛盾的。

不可以。extern和static是互斥的。

两个限定词的作用是相反的,怎么可能用到一块

  • 鍑芥暟鐨勫瓨鍌ㄧ被鍨嬫槸浠涔?
    绛旓細鍑芥暟鐨勫瓨鍌ㄧ被鍨嬫寚鐨勬槸鍏朵粬鏂囦欢妯″潡鍙惁璁块棶锛屽叾绫诲埆鍙互鏄extern鎴static銆俿tatic鏄寚璇ュ嚱鏁板彧鑳借鏈簮绋嬪簭鏂囦欢閬撲腑鐨勬ā鍧楄闂俥xtern鏄寚鍙鏈簮绋嬪簭鏂囦欢澶栫殑妯″潡璁块棶銆C璇█涓嚱鏁扮殑瀛樺偍绫诲瀷闅愬惈涓虹増鍏ㄥ眬鐨勶紝鍥犳榛樿涓篹xtern銆傚嚱鏁板唴瀹氫箟鐨勫彉閲忥紝榛樻潈璁や綔鐢ㄥ煙鍦ㄦ湰鍑芥暟鍐咃紝鍗冲叾绫诲瀷鏄痑uto銆
  • C璇█涓湁鍝簺瀛樺偍绫诲瀷?
    绛旓細c璇█涓殑瀛樺偍绫诲瀷鏈塧uto, extern, register, static 杩欏洓绉嶏紝瀛樺偍绫诲瀷璇存槑浜嗚鍙橀噺瑕佸湪杩涚▼鐨勫摢涓涓涓垎閰嶅唴瀛樼┖闂达紝鍙互涓哄彉閲忓垎閰嶅唴瀛樺瓨鍌ㄧ┖闂寸殑鏈夋暟鎹尯銆丅BS鍖恒佹爤鍖恒佸爢鍖恒1. auto瀛樺偍绫诲瀷 auto鍙兘鐢ㄦ潵鏍囪瘑灞閮ㄥ彉閲忕殑瀛樺偍绫诲瀷锛屽浜庡眬閮ㄥ彉閲忥紝auto鏄粯璁ょ殑瀛樺偍绫诲瀷锛屼笉闇瑕佹樉绀虹殑鎸囧畾銆傚洜姝わ紝au...
  • 璇烽棶鍦C璇█涓潤鎬佸彉閲廠taic涓庡閮鍙橀噺extern鏈変粈涔堝尯鍒?
    绛旓細鏈鍚庯紝瑕佽鏄庣殑鏄紝static鍙橀噺鍦ㄥ叏灞涓彧鏈変竴浠斤紝涓嶄細鏈夊浠芥嫹璐濄extern鐢ㄤ簬澹版槑鍙橀噺鏃讹紝濡傛灉涓嶆寚鍑哄彉閲忕殑绫诲瀷锛屽垯榛樿涓篿nt锛屽鏋滀笉鏄痠nt鐨勶紝蹇呴』鏄剧ず鎸囧嚭鍙橀噺鐨勭被鍨嬶紝鍚﹀垯鍑洪敊銆俥xtern瀹為檯涓婂彧瀵瑰彉閲忔湁鐢紝瀵瑰嚱鏁拌岃█锛屽彧鏄釜骞屽瓙锛堣兘澶熸洿鍔犳竻鏅版槑浜嗙殑璁╂垜浠煡閬撲篃璁╃紪璇戝櫒鐭ラ亾璇ュ嚱鏁板彲浠ョ敤浜庘滃浜も濓級...
  • C璇█涓彉閲忓瓨鍌static鍜extern涓や釜鍏抽敭瀛楃殑浣滅敤鍒嗗埆鏄粈涔
    绛旓細鐢static淇グ鍑芥暟鐨勮瘽锛屾儏鍐典笌淇グ鍏ㄥ眬鍙橀噺澶у悓灏忓紓锛屽氨鏄敼鍙樹簡鍑芥暟鐨勪綔鐢ㄥ煙銆extern鍏抽敭瀛 鍦C璇█涓紝淇グ绗xtern鐢ㄥ湪鍙橀噺鎴栬呭嚱鏁扮殑澹版槑鍓嶏紝鐢ㄦ潵璇存槑鈥滄鍙橀噺/鍑芥暟鏄湪鍒瀹氫箟鐨勶紝瑕佸湪姝ゅ寮曠敤鈥濄傚湪涓婇潰鐨勪緥瀛愪腑鍙互鐪嬪嚭锛屽湪file2涓鏋滄兂璋冪敤file1涓殑鍙橀噺a锛屽彧椤荤敤extern杩涜澹版槑鍗冲彲璋冪敤a锛岃繖灏...
  • c璇█extern璺焥tatic鍙互涓璧风敤鍚
    绛旓細涓嶈兘銆extern淇グ鍏ㄥ眬鍙橀噺鍜屽嚱鏁帮紝琚慨楗扮殑鍙橀噺鍜屽嚱鏁板彲浠ュ湪鍒殑鏂囦欢閲屼娇鐢ㄣ傝static淇グ鐨勫彉閲忓拰鍑芥暟浣滅敤鑼冨洿浠呴檺浜庡畾涔夊畠鐨勬枃浠跺唴閮ㄣ備袱鑰呮槸鍐茬獊鐨勩
  • c璇█涓嚱鏁伴粯璁ゅ瓨鍌ㄧ被鍨嬫槸浠涔
    绛旓細c璇█涓殑瀛樺偍绫诲瀷鏈static 銆乤uto銆extern銆佸強register锛屽嚱鏁伴粯璁ょ殑瀛樺偍绫诲瀷搴旇鏄痚xtern锛屾剰鎬濇槸鍏锋湁澶栭儴閾炬帴鎬х殑銆備竴鑸潵璇达紝浼氶氳繃extern鏉ュ0鏄庡嚱鏁般傛瘮濡備笅闈㈢殑浠g爜锛屽湪1.c涓畾涔変竴涓嚱鏁帮紝鍑芥暟鐨勫0鏄庡啓鍦1.h澶存枃浠朵腑锛屽湪2.c涓氳繃娣诲姞1.h鐨勫ご鏂囦欢锛屾潵澹版槑鍙婅皟鐢ㄥ嚱鏁癴()銆//1.cvoid f() { ...
  • C璇█涓叧閿瓧extern鍜宻tatic鐨勫尯鍒槸浠涔?
    绛旓細鍑犱箮瀹屽叏娌℃湁鍏崇郴鐨勪袱涓叧閿瓧锛屽尯鍒‘瀹炰笉濂藉洖绛斻傝仈绯讳及璁″氨鏄兘鏄被鍨嬩慨楗扮锛屽尯鍒お澶氥備竴鑸潵璇达紝extern 淇グ鐨勬槸鍏ㄥ眬鍙橀噺鎴栬呭嚱鏁帮紝琛ㄧず澶栭儴寮曠敤銆傚浜嶤++璇█杩樻湁涓涓壒娈婄敤娉曪紝extern "C" 琛ㄧず璇ユ绋嬪簭搴旇涓烘槸C璇█缂栧啓銆static 涓鑸〃绀哄眬閮ㄩ潤鎬佸彉閲忥紝鍙互鐢ㄥ湪鍑芥暟鍐咃紝涔熷彲浠ョ敤鍦ㄦ枃浠跺唴銆
  • C璇█涓static鏄仛浠涔堢敤鐨?
    绛旓細static 鐢ㄦ潵璇存槑闈欐佸彉閲忋傚鏋滄槸鍦ㄥ嚱鏁板闈㈠畾涔夌殑锛岄偅涔堝叾鏁堟灉鍜屽叏灞鍙橀噺绫讳技锛屼絾鏄紝static瀹氫箟鐨勫彉閲忓彧鑳藉湪褰撳墠c绋嬪簭鏂囦欢涓娇鐢紝鍦ㄥ彟涓涓猚浠g爜閲岄潰锛屽嵆浣夸娇鐢extern鍏抽敭璇嶄篃涓嶈兘璁块棶杩欎釜static鍙橀噺銆傚鏋滄槸鍦ㄥ嚱鏁板唴閮ㄥ畾涔夌殑锛岄偅涔堣繖涓彉閲忓彧鍒濆鍖栦竴娆°C璇█鏄竴闂ㄩ氱敤璁$畻鏈虹紪绋嬭瑷锛屽簲鐢ㄥ箍娉涖侰璇█鐨...
  • C璇█涓湁鍝簺瀛樺偍绫诲瀷?
    绛旓細鍥涚鍙橀噺瀛樺偍绫诲瀷銆傝鏄庣濡備笅:auto static extern register 涓銆乤uto auto绉颁负鑷姩鍙橀噺銆傚眬閮ㄥ彉閲忔槸鎸囧湪鍑芥暟鍐呴儴璇存槑鐨勫彉閲(鏈夋椂涔熺О涓鸿嚜鍔ㄥ彉閲)銆傜敤鍏抽敭瀛梐uto杩 琛岃鏄, 褰揳uto鐪佺暐鏃, 鎵鏈夌殑闈炲叏绋嬪彉閲忛兘琚涓烘槸灞閮ㄥ彉閲, 鎵浠uto瀹為檯涓 浠庢潵涓嶇敤銆備簩銆乻tatic static绉颁负闈欐佸彉閲忋傛牴鎹...
  • C璇█涓畾涔夋暟缁勬椂,鍓嶉潰鐨static銆乤uto銆extern涓夌瀛樺偍绫诲埆鏈変粈涔堜綔鐢...
    绛旓細C璇█涓彁渚涗簡瀛樺偍璇存槑绗uto锛宺egister锛extern锛static璇存槑鐨勫洓绉嶅瓨鍌ㄧ被鍒傚洓绉嶅瓨鍌ㄧ被鍒鏄庣鏈変袱绉嶅瓨鍌ㄦ湡锛氳嚜鍔ㄥ瓨鍌ㄦ湡鍜岄潤鎬佸瓨鍌ㄦ湡銆傚叾涓璦uto鍜宺egister瀵瑰簲鑷姩瀛樺偍鏈熴傚叿鏈夎嚜鍔ㄥ瓨鍌ㄦ湡鐨勫彉閲忓湪杩涘叆澹版槑璇ュ彉閲忕殑绋嬪簭鍧楁槸琚缓绔嬶紝瀹冨湪璇ョ▼搴忓潡娲诲姩鏃跺瓨鍦紝閫鍑鸿绋嬪簭鍧楁椂鎾ら攢銆傚湪鍑芥暟鍐呴儴瀹氫箟鐨勫彉閲忔垚涓哄眬閮...
  • 扩展阅读:c语言extern说明 ... extern用法举例 ... c语言extern最简单的编译 ... c语言extern结构体 ... c语言的for循环例子 ... c语言static和extern ... c需要extern ... c语言static的用法 ... c语言extern怎么跨文件 ...

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