extern、static、.global的用法

extern、static、.global的用法

1、extern、static、.global?

extern: 比如要調用另外一個模塊的函數foo(),需要extern int foo();,用於導入一個模塊使用,由外用到內

global: 用來聲明本變量或函數可以被外部調用,由內用到外

static: 改變變量或函數的作用域

2、外部變量和全局變量的區別?

參考鏈接:https://zhidao.baidu.com/question/1795695107848265667.html
全局變量也稱爲外部變量,它是在函數外部定義的變量。

它不屬於哪一個函數,它屬於一個源程序文件。其作用域是整個源程序。在函數中使用全局變量,一般應作全局變量說明。 只有在函數內經過說明的全局變量才能使用。全局變量的說明符爲extern。 但在一個函數之前定義的全局變量,在該函數內使用可不再加以說明。外部變量是在函數外部定義的全局變量,它的作用域是從變量的定義處開始,到本程序文件的結尾。在此作用域內,全局變量可爲各個函數所引用。編譯時將外部變量分配在靜態存儲區。 有時需要在其他文件中使用extern來聲明外部變量,以擴展外部變量的作用域。 也可用static聲明外部變量,使該變量不能被其他文件引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的

3、c語言是模塊化編程的工具,模塊如何組織,模塊之間如何交互應該是個大問題。我覺得有以下幾個值得注意的地方

參考鏈接:https://zhidao.baidu.com/question/1516329137318348580.html
1、每個源文件就是一個獨立的模塊,它應該能夠在不連接任何其它模塊、不需要其它源文件的情況下獨立編譯。
2、模塊之間是通過函數、常量、變量、結構定義、宏(似乎也是常量的一種)進行交互的
3、每個模塊應該包括導入和導出兩個部分,比如要調用另外一個模塊的函數foo(),需要extern int foo();
這應該屬於模塊的導入部分
而由該模塊提供的函數,應該在相應的頭文件中聲明,作爲模塊的導出部分。
模塊的導出部分應該放在該模塊的頭文件中。
4、如果只在本模塊使用的變量,在本模塊中定義成static的就可以了;否則就是全局變量,全局變量在頭文件中聲明一下,同時也作爲模塊的導出部分。
5、宏既可以定義在頭文件中,也可以定義在源文件中。如果宏只是模塊中用到,相當於局部常量,放到源文件中好了;如果其它模塊也要用到,那麼把它放到頭文件中去。
6、結構定義似乎都放在頭文件中。是不是應該另外有一個頭文件,專門用來定義結構???

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章