C 不定個數引數寫法

2021-07-09 14:36:51 字數 967 閱讀 9072

有時候需要寫不定個數引數的函式。就像c語言的sprintf函式。

函式申明方法是比較固定的:

return-type functionname( [type t1] …)

比如: void fun(…);

: int printf ( const char * format, … );

: 省略號的位置就是不定個數的引數列表了。

接下來,給出常見的3種寫法:

比如知道資料是int型。

#includeint sum(int a, ...)

int main()

方法2已經比較實用,但畢竟以c的函式為主,處理不當時可能會出現資料溢位,不易查詢錯誤。這時可以考慮boost::format,這是boost的乙個功能庫,專門格式化字串,如果出錯會丟擲異常。boost.format是乙個類,它的可擴充套件性還是不錯的,但效率比起sprintf還是要差不少的。

用法如下:

#include #include #include using namespace std;

using namespace boost;

int main(){

// 使用%序號%的方式給出指示符,後面用%連線對應的資料。

cout形式為:[ n$ ] [ flags ] [ width ] [ . precision ] type-char

其中:n$用於指定第n個引數,但這個引數要麼都加,要麼都不加

flags用於處理格式,比如對齊。

width指當前給出寬度

.precision小數點後多少位

type-char指資料型別(與sprintf相同)

另外,boost.format有乙個方便的用法%n%,如文中第乙個示例。

boost.format丟擲的異常有bad_format_string、too_few_args、too_many_args、out_of_range等。

c 不定引數

va list vlist va start vlist,pszformat pszformat 表示 的前乙個引數 va end vlist 其中 typedef char va list define va start crt va start define va arg crt va arg ...

C 不定引數

c 不定引數 下面,我們來看一下,如果在c 的函式中接收數量不定的函式引數。這種形式如同在c 的函式引數列表中使用params 型別的引數。我們可以將函式定義成能夠接受任意數量的實參。通過將省略號 3個句點 寫在函式定義中形參列表的最後,即可表示呼叫該函式時可以提供數量可變的實參。例如 int su...

C語言中不定引數個數的函式

c 中有函式過載這種方法,以供我們呼叫時要可以不確定實參的個數,其實c語言也可以,而且更高明!我們在stdio.h中可以看到printf 函式的原型 int printf char format,事實上,我們如果要寫這樣的函式也可以類似的寫,那麼在定義函式時用上這個符號 它叫佔位符,喊它 三個點 也...