在我main
功能,我使用下面的代碼傳遞持股量參數搞砸了價值
float f = 32.0;
func("test string %f", f);
func
(這些都是例子名)聲明如下
void func(const char *str, ...);
我在執行的這個函數,我使用一個叫做all_types
的聯合來獲得傳遞的參數值
union all_types
{
void *v;
CLObject *obj;
char *s;
long l;
char c;
float f;
int i;
double d;
};
,然後給出一個值,該聯盟這樣
union all_types *o = calloc(1, sizeof(union all_types));
while ((o->v = va_arg(list, void *)) != NULL)
現在,當我知道這個說法是一個浮動,因爲這將是很奇怪的值(我設置斷點弄明白)。工會的i
和l
值將是32,因爲他們應該。但是,f
的值是一些奇怪的數字,如0.00000000000000000000000000000000000000000013592595
。有誰知道我爲什麼得到這種行爲?這個函數適用於我測試過的其他類型的對象。
什麼我基本上是在這個函數做的是試圖實現一種printf函數,並與printf的,我用的格式說明。通過使用與說明符相結合的聯合體,我可以將它與其他類型結合使用。 「float」是我唯一遇到過問題的人。 –
@ChrisLoonam:你可能會很幸運。不習慣它。它不適用於別人的系統,別人的編譯器或下一版本的編譯器。 – rici
@ChrisLoonam,所以你想要的是類似於http://stackoverflow.com/questions/5977326/call-printf-using-va-list –