K R C與ANSI C函式宣告的區別

2021-07-04 01:15:37 字數 846 閱讀 7519

k&r c的函式宣告:

function();

這種方式宣告的函式,在向其傳遞引數時,較小型別的引數會被進行隱式型別轉換,如char、short被轉換為int,float被轉換為double。即堆疊中所儲存的引數其所佔位元組數大於實際應該占用的位元組

ansi c的函式宣告:

int function( char c, short si, float f );

這種方式宣告的函式,在向其傳遞引數時,不會發生隱式型別轉換,堆疊中各個引數所佔位元組就是各個型別的實際應該占用的位元組。

k&r c的函式定義:

function()

char c;

short si;

float f;

這種方式定義的函式,其引數在使用時,會先按被隱式型別轉換之後的大小,從堆疊中提取出來,然後再按函式定義中的實際型別進行擷取。如,char型別變數c實際訪問時,先在堆疊中變數c的儲存位置,提取出乙個int大小的「臨時變數」,然後將該「臨時變數」擷取成乙個char變數再進行運算。short及float變數同理。

ansi c的函式定義:

int function( char c, short si, float f )

這種方式定義的函式,其引數使用時,直接從堆疊中按實際定義的大小進行提取即可。

故k&r c和ansi c的函式宣告及定義,在引數型別轉換上的區別可分為兩個部分:

1. 在引數傳遞給該函式時,是否發生了型別提公升?k&r c有型別提公升,ansi c沒有

2. 在函式實際使用其引數時,是否發生了位元組擷取?k&r c有,而ansi c沒有

因此,**中對同乙個函式的宣告和定義,必須使用一致的風格,不可混用k&r c和ansi c風格

K R C與ANSI C的區別

c語言由dennis m.ritchie在1973年設計和實現。從那以後使用者逐漸增加。到1978年ritchie和bell實驗室的另一位程式專家kernighan合寫了著名的 thec programming language 將c語言推向全世界,許多國家都出了譯本,國內有一些c語言書就是這本書的...

C和指標 K R C 與 ANSI C的區別

c語言由dennis m.ritchie在1973年設計和實現。從那以後使用者逐漸增加。到1978年ritchie和bell實驗室的另一位程式專家kernighan合寫了著名的 the c programming language 將c語言推向全世界,許多國家都出了譯本,國內有一些c語言書就是這本書...

GNU C 與 ANSI C的區別

1.零長度陣列 gnu c允許使用零長度陣列,定義變長度物件時比較方便 struct var data var data的大小僅為乙個int型,data是常量位址,data index 是訪問其後的記憶體空間。struct var data s malloc sizeof var data len ...