c語言中如何獲取函式可變引數的個數

2021-04-18 23:10:09 字數 2401 閱讀 2361

1樓:匿名使用者

需要借用c語言的va_list 巨集定義,及相關操作來實現可變引數。

va_list 所在標頭檔案:#include ,用法如下:

(1)首先在函式裡定義一具va_list型的變數,這個變數是指向引數的指標;

(2)然後用va_start巨集初始化剛定義的va_list變數;

(3)然後用va_arg返回可變的引數,va_arg的第二個引數是你要返回的引數的型別(如果函式有多個可變引數的,依次呼叫va_arg獲取各個引數);

(4)最後用va_end巨集結束可變引數的獲取。

以下是乙個自定義列印介面的實現:

int my_printf(const char *fmt, ...)//...表示引數可變

2樓:匿名使用者

第一,c裡沒有方法,只有函式

第二,可以使用vsprintf來代替sprintf

3樓:安藤沙耶香

因為va_start, va_arg, va_end等定義成巨集,所以它顯得很愚蠢, 可變引數的型別和個數完全在該函式中由程式**控制,它並不能智慧型地識別不同引數的個數和型別。

有人會問:那麼printf中不是實現了智慧型識別引數嗎?那是因為函式printf()是從固定引數format字串來分析出引數的型別,再呼叫va_arg的來獲取可變引數的。

也就是說,你想實現智慧型識別可變引數的話是要通過在自己的程式裡作判斷來實現的。

另外有乙個問題,因為編譯器對可變引數的函式的原型檢查不夠嚴格,對程式設計查錯不利。如果******_va_fun()改為:

如何在c語言中定義引數數目可變的函式

4樓:

定義如下:

《函式返回值> 函式名(形參1, 形參2, ...)舉例說明:

int  func(int a, int b, ...)printf()函式就是乙個引數版

可變的函式,其函式原型

權為:int printf (const char *__format, ...);

c語言函式定義時,可變引數型別已定,個數不定,應該怎麼做?

5樓:賺錢啊呀

這個錯誤是你宣告的某些變數占用空間太大,沒可用的空間,就會占用作業系統記憶體空間,建議你別宣告三維陣列

6樓:匿名使用者

就把譚浩強那本書高透了 基礎打好了就好說了

比如最基礎的 陣列 符號 遞迴 迴圈 等最基礎的東西打牢.

c語言 怎麼寫 可變 引數函式

7樓:匿名使用者

#include //可變引數襲函bai數必要的du標頭檔案#include

long int sum(unsigned int argc,...)    //可變引數函式必須包含至少乙個確定的引數

{zhilong int srt=0;

int va;

unsigned int i;

va_list vl;                        //用於指向可dao變引數列表

va_start(vl,argc);                 //初始化,va_start()呼叫的第乙個引數是所編寫的可變引數函式的最後乙個確定的引數

for (i = 0; i

8樓:匿名使用者

許多程式語言中,可以將一段經常需要使用的**封裝起來,在需要使用回時可以直接呼叫,答這就是程式中的函式。如c語言中:

int max(int x,int y)

就是一段比較兩數大小的函式,函式有引數與返回值。c++程式設計中的函式可以分為兩類:帶引數的函式和不帶引數的函式。這兩種引數的宣告、定義也不一樣。

帶有(乙個)引數的函式的宣告:

型別名標示符+函式名+(型別標示符+引數)不帶引數的函式的宣告:

void+函式名( )

花括號內為函式體。

帶引數的函式有返回值,不帶引數的沒有返回值。

c++中函式的呼叫:函式必須宣告後才可以被呼叫。呼叫格式為:

函式名(實參)呼叫時函式名後的小括號中的實參必須和宣告函式時的函式括號中的形參個數相同。有返回值的函式可以進行計算,也可以做為右值進行賦值。

c語言中的部分函式:

main(主函式)

max(求最大數的函式)

scanf(輸入函式)

printf(輸出函式)

韋宵汨助休鑄琯版泫哎維底香戈速燮純坐焜嵋服

c語言帶引數函式的原型宣告,c語言中函式原型宣告部分是什麼意思

void show n char char,int 如果是在c 是合法的,char,int 是友元,表示只有引數型別無引數變數名,但在c 語言中這樣寫不規範,要寫成 void show n char char ch,int a 此處為形參,實際使用中要用實際引數傳入。如 呼叫該函式時,傳入實參 sh...

c語言中,函式可以巢狀定義嗎,C語言中,函式可以巢狀定義嗎

取決於編譯器.我在ubuntu16.04 用預設gcc,在eclipse中測試可以實現巢狀定義.經測試在函式中定義的函式,在當前作用域可以被呼叫.這樣一來,c語言貌似具有了一些物件導向的特性,使用起來比較方便 定義的時候不能巢狀,但是定義的時候可以遞迴 除了主函式以外都可以,不過在該函式巢狀定義前要...

c語言中怎麼用二維陣列作為函式引數

二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大 明,如 它們是合法且等價,也可以使用如下形式 但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯 因為從實參傳遞來的是陣列的起始位址,如果在形參中不說明列數,編譯器將...