C語言小技巧 1 實現可變引數

2021-09-08 08:42:26 字數 847 閱讀 4776

先看下面的**:

intmax(

intn,

return

ret;}

我們可以這樣使用這個函式:

max(2, 1, -1) , 結果是 1.

max(4, 1, 2, -1, -2) , 結果是 2.

php函式的原始c**實現,用了乙個巨集php_function,就用到了類似的原理。

c語言裡面的經典函式 printf 也用到了這個可變引數的特點。只是,它更加的進一步,可以傳遞不同引數型別的引數。

下面再來看乙個例子:

void

param_demo(

char

*fmt,}}

這個函式可以這樣呼叫:

param_demo("idsc", 2, 2.01, "hello, world", 'c');

然後將會輸出:

int : 2

double : 2.010000

string : hello, world

char : c

大多數對指標比較了解的人應該能夠明白上面的**。只是有一點要注意,char 型別 原則上只占用乙個位元組,但是,實際上,

cpu有乙個對齊問題,一般來說,函式的引數最小也要滿足乙個 "字",乙個字的大小,在大多數平台下就是 int 的大小。

比如 在 i386 機器上,乙個字的大小是 4個位元組。char 型別占用 1個 位元組,剩餘 3個位元組空閒,然後再接下去儲存。

仔細讀讀上面的例子,相信你也能寫可變引數的函式了。

posted @

2009-11-06 15:27

暮夏 閱讀(

...)

編輯收藏

C語言可變引數實現

第一 什麼是可變引數 int printf const char format,看到printf的定義大家就知道了,只有乙個固定的const char 引數,後面的都是不定長的引數列表了。第二 自己寫乙個可變引數函式 1.引數形參方式,跟printf類似,第乙個為固定引數,後面的用.代替 2.包含s...

C語言怎麼實現可變引數?

摘要 c語言使用可變引數,需要借助巨集。這些巨集定義在stdarg.件。stdarg.h宣告了乙個型別va list和三個巨集va start,va arg,va end。include va list v arg 定義乙個型別 va start v arg,len 引數列表初始化 va arg v...

c語言可變引數實現示例

這段 展示了如何不使用中的va list va start va end巨集來實現自定www.cppcns.com義可變引數以及如何改變預設的 d f s等格式字元。複製 如下 include include itoa and ltoa include strcat and strlen echo ...