→ loveme00835:不推薦寫不定參數的東西, 有夠危險, 你該想的是如何把01/16 23:56
→ loveme00835:流程分得更詳細, 會把數字轉成16進位字串了, 那取代字01/16 23:57
→ loveme00835:串該怎麼做? 需要多個整數傳指標進去不就好了?01/16 23:57
↑ 我也推 l 大
推 softwind:__VA_ARGS__, plz check "Variadic Macros" 01/17 00:07
→ softwind:不定引數會危險... 通常是 user的問題, printf("%s",0); 01/17 00:09
→ softwind:也是當給你看 不用太擔心~ 當機比未定狀態好了 01/17 00:10
推 loveme00835:不定引數也沒有彈性, 更不用說語意明不明確了, 不是方 01/17 00:19
→ loveme00835:便就好01/17 00:19
--------------------------------------------------
Primer 4e 7.2.7 (p244)
void foo(param_list, ...);
「此函式被呼叫時可能有零個或多個引數,且引數型別未知」
-------------------------------------------------------
就小弟對於 va_list 淺薄研究,
所有終止進行運算大致上只有二種方式,
一種是如 Primer 所說,一開始就明確給參數數量,
不過要這麼做的話幹嘛還要用 va_list ? 塞 array 不就好了?
另一方法是設定終止值,數字的話可以最後給 0(例子常用-1) 當做結束,
提醒的是,va 系列是 macro,不是函式,下述連結可參考
http://ehome.hifly.to/showthread.php?s=&threadid=329
----------------------------------------------------------
另 loveme 所指出的 「危險」,其實並不只是有沒有基本 sence ,
而是真的很危險,特別是在自動轉型的時候,(像是 double 引數傳入 int 參數)
以下程式碼可供參考,注意第四次呼叫副函式時結果會是錯的
http://nopaste.csie.org/0702b
可能我還感受不到它的好處,所以小弟也是覺得少用 va_list
之前用 va 寫的也全都改回來
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
推 loveme00835:Q口Q 01/17 01:28