extern嗎?
可以被別的文件調用
不過要include「該文件名」
extern可省
用static就不能被別的文件調用了不可省
2. C語言中允許默認的函數類型是什麼
int。C語言規定:在定義函數時,若其返回值類型為int,則可以默認。
C語言函數有三類,分為外部函數、靜態函數、內聯函數,其中前兩種是C89標准支持,第三種是C99標准增加的。
1、外部函數
這類函數是默認的函數類型,基本上平時我們使用的就是這種函數,聲明有以下兩種方式,例如:
// 使用extern關鍵字,顯示聲明
extern int add(int a, int b);
// 或省略關鍵字extern,編譯器也會自動認為是extern
int add(int a, int b);
外部函數表明在當前聲明和定義的代碼文件中可以使用,也可以在其它代碼文件中可以通過#include指令包含使用,對外部的代碼可見。
2、靜態函數
這類函數其實與外部函數相對的,因為需要使用static關鍵字修飾,因此稱為靜態函數,其實就是內部函數。聲明方式如下,例如:
static int add(int a, int b);
靜態函數的作用域只能在當前聲明和定義的文件中,在其它代碼文件中無法#include使用,因此在整個程序中,特別是大型程序,有多個源代碼文件時,即使定義相同名稱的兩個靜態函數,也不會有命名和使用沖突。
3、內聯函數
是新增的特性,使用inline關鍵字聲明和定義,該類函數類似#define宏定義展開,編譯時會直接將函數定義代碼在調用的地方復制展開,這樣會減少函數調用的開銷,提高運行效率。
inline int add(int a, int b);
內聯函數適合短小的、被頻繁調用的函數,對於復雜函數,無法使用。
(2)函數的默認存儲類型是外部的擴展閱讀:
C語言編寫注意事項:
1、const在聲明變數中起限製作用, 該限定變數的值不能被修改。
2、%運算符不能應用與float或double類型。
3、char類型轉換為int型時, 無法判斷它是signed還是unsigned.這樣其結果有可能為負數, 因此轉換時盡量指定signed和unsigned限制符。
4、++i與i++不同之處: ++i是先+1在使用, i++是先使用i在遞加1。
5、三元運算符"?:" 第一個表達式的括弧不是必須的,但是由於三元表達式的優先順序非常低,我們還是將第一個表達式用()括起便於閱讀和理解。
6、C語言中可以使用遞歸 (即函數調用自身函數), 其不節省儲存器開銷也不加快執行速度, 只是使程序緊湊便於理解。
3. C語言中,函數的隱含存儲類別是 auto 還是 extern,為什麼兩種答案我都看到過
函數的存儲類型指的是其他文件模塊可否訪問,其類別可以是extern或static。
static是指該函數只能被本源程序文件道中的模塊訪問。extern是指可被本源程序文件外的模塊訪問。
C語言中函數的存儲類型隱含為版全局的,因此默認為extern。
函數內定義的變數,默權認作用域在本函數內,即其類型是auto。
(3)函數的默認存儲類型是外部的擴展閱讀:
C語言中提供了存儲說明符auto、register、extern、static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態存儲期。
其中auto和register對應自動存儲期。具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數內部定義的變數成為局部變數。在某些C語言教材中,局部變數稱為自動變數,這就與使用可選關鍵字auto定義局部變數這一作法保持一致。
extern用在變數聲明中常常有這樣一個作用:要在*.c文件中引用另一個文件中的一個全局的變數,那就應該放在*.h中用extern來聲明這個全局變數。
extern用於變數的用法:
1、extern int a;//聲明一個全局變數a
2、int a; //定義一個全局變數a
3、extern int a =0 ;//定義一個全局變數a 並給初值。一旦給予賦值,一定是定義,定義才會分配存儲空間。(注意:經過測試在GCC中,這樣定義變數是不能通過編譯的,而在VS2013可以)
4. c語言中存儲類型自動,靜態,外部,寄存都是什麼意思
在函數體內聲明的變數在默認情況下都是auto[自動]存儲類型
在代碼塊之間傳遞信息的一種方法就是使用外部變數。當一個變數在函數的外部被聲明時,它的存儲空間是永久分配的,它的存儲類型是extren.外部變數的聲明看上去和函數或代碼塊內部所聲明的變數一樣。外部變數對於它之後的所有函數都有效。在代碼塊或函數後,外部變數仍然存在。
static[靜態]的基本用途是允許一個局部變數在重新進入代碼塊時能夠保持原來的值。這和自動變數形成了鮮明的對比,自動變數在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。
register[寄存器]存儲類型告訴編譯器相關的變數應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執行速度,但是,register聲明只是向編譯器所提出的「建議」,並非強制要求。
5. c語言宏定義存儲的什麼類型
宏定義存儲的類型有static 、auto、extern、及register,函數默認的存儲類型應該是extern,意思是具有外部鏈接性的。一般來說,會通過extern來聲明函數。
存儲具有如下特點:索引從 0 開始,數組在內存中占據連續的位元組單元。數組占據的位元組單元數等於數組元素個數乘以該數組所屬數據類型的數據占據的位元組單元數(元素個數乘以元素類型大小)。數組元素按順序連續存放。
宏定義格式:
#define 標識符,字元串。其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
6. 在C語言中,存儲類別包括
四種變數存儲類型。說明符如下:
auto static extern register
一、auto
auto稱為自動變數。
局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變數都被認為是局部變數, 所以auto實際上
從來不用。
二、static
static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。
1. 靜態局部變數
它與局部變數的區別在於: 在函數退出時, 這個變數始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變數一樣。
2. 靜態全程變數
Turbo C將大型程序分成若干獨立模塊文件分別編譯, 然後將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便於軟體的管理和維護。靜態
全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與
全程變數的區別是: 全程變數可以再說明為外部變數(extern), 被其它源文件使用,
而靜態全程變數卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變數通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變數。
打字不易,如滿意,望採納。
7. 在函數體之外定義的變數的默認存儲類型是什麼
局部變數
(1)在一個函數內部定義的變數是局部變數,只能在函數內部使用.
(2)在主函數內部定義的變數也是局部變數,其它函數也不能使用主函數中的變數.
(3)形式參數是局部變數.
(4)在復合語句中定義的變數是局部於復合語句的變數,只能在復合語句塊中使用.
(5)局部變數在函數被調用的過程中佔有存儲單元.
(6)不同函數中可以使用同名變數.在不同的作用域內,可以對變數重新進行定義.
全局變數
(1)在函數外部定義的變數是全局變數,其作用域是變數定義位置至整個程序文件結束.
(2)使用全局變數,可增加函數間數據聯系的渠道.全局變數可以將數據帶入在作用域范圍內的函數,也可以將數據帶回在作用域范圍內的其它函數.
使用全局變數可讓函數帶回多個值,但一定要注意全局變數傳遞數據是數據傳遞的後門.全局變數在程序中任何地方都可以更新,使用全局變數會降低程序的安全性.
(3)提前引用外部變數,需對外部變數進行說明,或稱申明.
(4)使用程序中非本程序文件的外部變數,也要對使用的外部變數進行同上的申明,或用文件包含處理.
(5)局部變數如與外部變數同名,則在局部變數的作用域內,外部變數存在,但不可見,外部變數的作用被屏蔽.
(6)全局變數在程序運行過程中均佔用存儲單元.
(7)在編程時,原則上盡量少用全局變數;能用局部變數,不用全局變數
8. 7、C語言中,形參的默認存儲類別為。 (A)auto (B) static (C)register (D)extern
C。
在函數內部或復合語句內定義變數時,如果沒有指定的存儲類型或使用了auto說明符,系統就認為所定義的變數具有自動類別。
形參即函數的自變數,其初值來源於函數的調用。只有在程序執行過程中調用了函數,形參才有可能得到具體的值,並參與運算求得函數值。形參表相當於變數說明,但應特別注意:此處只能使用類型標識符,而不能直接使用類型。
用auto(或省略)來區分說明的局部變數。當執行進入局部變數所在的塊時,在棧上為變數分配存儲,退出塊時,存儲單元被回收。具有自動存儲期的變數在進入聲明該變數的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數內部定義的變數成為局部變數。
(8)函數的默認存儲類型是外部的擴展閱讀:
1、register關鍵字提示編譯器把局部變數或函數的形參盡可能放入CPU的寄存器中,以便快速訪問。因此變數的位元組長度不應該超過寄存器的長度。不要用取地址符(&)去獲得此變數的內存地址。例如:
{
register int Miles;
}
2、static是全局變數的默認存儲類。例如:
static int Count;
int Road;
main()
{
printf("%d ", Count);
printf("%d ", Road);
}
Count與Road兩個變數都是默認的static存儲類。
3、extern存儲類是指全局變數可以被各個對象模塊訪問。使用extern關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。
網路-形式參數
網路-存儲類
9. 在函數中默認存儲類型說明符的變數應該是
變數和函數的屬性包括數據類型和數據的存儲類別,存儲類別指數據在內存中存儲方式(靜態和動態),包含auto,static,register,extern四種。
Auto自動變數:函數中未加static的局部變數和形參都屬於此類,調用函數時分配內存,函數結束時釋放內存。一般隱藏auto默認為自動存儲類別。我們程序都變數大多是自動變數。
所以你是對的
10. 「在C語言中,函數名的儲存類別為外部」
默認都為外部 ,就是可以被別的文件調用,前面static 修飾的話,則只能在本文件域中被調用。。