在c語言不斷發展中這個標頭檔案有了什麼變化?
·在c++時改名為cstdarg
·在c++11時新增加內容
建立可變函式
stdarg庫允許你建立乙個可變數量的引數的函式
引數列表一般會在最後加上省略號...
int sum(int n,...)
//這裡函式功能假設要求解n個引數的和
這個庫是通過棧來實現的,首先要建立乙個棧的指標,這個型別為va_list
va_list p;
建立好後需要使用va_start巨集來賦予位址
va_start(p,n);
//第乙個引數為va_list型
//第二個引數為可變引數的形式引數
目前va_list會指向第乙個引數
然後需要通過迴圈將第二個引數不斷推進到最後乙個引數
需要使用va_arg巨集
va_arg(p,int);
//第乙個引數為va_list型
//第二個引數為下乙個引數的型別,即可變引數的型別
首先會返回當前引數資料,然後指向下一引數
經歷一系列迴圈後需要使用va_end來釋放
va_end(p);
//引數為va_list型
int sum(int n,...)
va_end(p);
return sum;
}
假如乙個函式要實現多種功能,同乙個va_list肯定是不夠用的,可以使用va_copy函式實現複製
va_list p1,p2;
va_start(p1,int);
//...經過一系列操作
va_copy(p1,p2);
//兩個均為va_list型,會將第乙個va_list複製給第二個va_list(會從當前位置開始)
當然這個函式有些多餘,也可以直接賦值
va_list p1,p2;
va_start(p1,n);
//...經過一系列操作
p2 = p1;
//如果要從頭開始的參數列也可以va_start(p2,n)
部分問題
1.注意型別提公升問題
2.確定引數個數目前只有兩種方法:一種是在最開始引數得出個數,一種是定義特殊值,只要引數掃瞄到特殊值就結束(比如'\0'或是null)
3.va_end不是簡單地將va_list置為null
c語言標頭檔案
c語言標頭檔案 每個c c程式通常分為兩個檔案。乙個檔案用於儲存 程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存 程式的實現 implementation 稱為定義 definition 檔案。c c程式的標頭檔案以 h 為字尾,c程式的定義檔案以 c 為字尾,c 程式的定義檔...
C語言標頭檔案
早期的程式語言如 basic fortran 沒有標頭檔案的概念,c c 語言的初學者雖然會 用使用標頭檔案,但常常不明其理。這裡對頭檔案的作用略作解釋 1 通過標頭檔案來呼叫庫功能。在很多場合,源 不便 或不准 向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的...
C語言標頭檔案
標頭檔案結構 標頭檔案一般由3部分組成 1.標頭檔案的開頭版本和版權的宣告 2.預處理塊 3.函式和類結構的宣告 question1 include和 include a.h 有什麼區別?include引用的是標準庫的標頭檔案,也就是說編譯器是從標準庫進行開始搜尋,而 include a.h 則是屬...