先看下面的**:
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 ...