国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

c語言3種鏈接屬性: 外部(external), 內部(internal),無設置(none)

2019-11-06 06:15:15
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/ljz2009y/article/details/8142653

c語言中,多個文件組合的時候,有可能標示名相同,那么這個時候編譯器如何判別的呢?    c語言中有3種鏈接屬性: 外部(external), 內部(internal),無設置(none)    外部(external): 使用extern關鍵字    內部(internal):  使用static關鍵字注:

C 語言規定,如果在定義函數時省略 extern,則隱含為外部函數所以C語言的函數默認是external的,如果加了static就是internal,只有文件內可以訪問

小結一下:

1.extern的修飾中在工程必須要有一個變量的定義,否則不能能使用。

2.extern使用之后可以實現全部工程的不同文件使用相同的變量

3.internal的屬性方式,通過static來進行修飾僅僅是在該文件中可以使用,但是在其他的文件中則不能訪問。

    對各種情況進行一些測試吧 第一步測試,在兩個文件中定義相同名稱的變量    unit1.c    --------------------int a = 10;void PRinttest1(){ printf("print test at %s, variable a = %d/n", __FILE__, a);}

    unit2.c -------------------int a = 20;void printtest2(){ printf("print test at %s, variable a = %d/n", __FILE__, a);}

    main.c ------------------void printtest1();void printtest2();int main(int argc, char *argv[]){ printtest1(); printtest2(); system("PAUSE");  return 0;}   編譯時提示錯誤 unit2.c multiple definition of 'a' ,由于unit1.c和unit2.c都定義了a   第一步測試結論:如果在不同的文件中定義相同名字的變量,編譯器無法通過編譯      第二步測試,把其中一個聲明改成extern    這個時候把unit2.c改造一下extern int a;void printtest2(){ printf("print test at %s, variable a = %d/n", __FILE__, a);}   unit2中使用extern標示該變量是外部鏈接的, 這樣編譯通過了,結果顯示unit1和unit2中a的值都為10,OK,值相同了,那么真的是同一個變量了嗎,修改一下值再確認一下   改造一下main.c,修改a的值extern int a;a = 20;printtest1();printtest2();a = 30;printtest1();printtest2(); 這個時候輸出為 unit1.c   20 unit2.c   20 unit1.c   30 unit2.c   30 可以確認的確是使用了同一個變量了。 第二步測試結論;使用extern可以訪問其他文件中定義的變量  第三步測試把其中一個聲明使用static標示 首先在unit1.c這把a聲明成static,個時候編譯器提示main.c和unit2.c中的a未定義,static把unit1.c中的a定義為文件內部使用范圍,unit2.c和main.c中無法訪問到該變量。 把uint2.c中的聲明修改成int a; 這個時候輸出為 unit1.c   10 unit2.c   20 unit1.c   10 unit2.c   30    OK,結果顯示unit1.c中的a和unit2.c中的a互相不影響了。再測試一下,在unit1.c中使用extern int a,看看能不能引用到unit2.c中的變量void printtest1(){ extern int a; a = 10; printf("print test at %s, variable a = %d/n", __FILE__, a);}    這個時候輸出為 unit1.c   10 unit2.c   20 unit1.c   10 unit2.c   30    可以確認unit1.c中使用的a都是本文件內定義的變量,無法影響到unit2.c中的變量了。 第三步測試結論:使用static標示的變量在文件內部有效,其他文件中無法訪問。并且在該文件中無法引用到其他文件的同名稱變量  第四步測試,兩個文件都設置成extern 如果在unit1.c和unit2.c中都申明成extern會怎么樣呢?    unit1.c    --------------------extern int a;void printtest1(){ printf("print test at %s, variable a = %d/n", __FILE__, a);}

    unit2.c -------------------exntern int a;void printtest2(){ printf("print test at %s, variable a = %d/n", __FILE__, a);} 這個時候所有使用a的地方都報編譯錯誤,提示沒有定義變量。 第四步測試結論:使用extern標示的變量必須已經定義過。  第五步,測試static標示的函數 把unit1.c中的printtest1修改成static static void printtest1() 這時編譯器報錯,main.c中使用的printtest1未定義。 第5步測試結論:使用static標示的函數,在其他文件中不能訪問。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 集安市| 扶绥县| 呼和浩特市| 咸丰县| 林口县| 柯坪县| 湛江市| 阳谷县| 习水县| 梁山县| 宁晋县| 元朗区| 辽中县| 平潭县| 昌宁县| 报价| 安阳县| 会泽县| 曲阳县| 峡江县| 江达县| 庆阳市| 晋州市| 崇文区| 花莲市| 青河县| 六安市| 大英县| 金塔县| 鹰潭市| 石屏县| 丽水市| 阿图什市| 九寨沟县| 江安县| 临泉县| 广饶县| 中山市| 天长市| 云南省| 岳阳县|