我剛好有想在這個問題類似的情況由兩年:變量函數(va_arg)不能用於float,而printf呢?有什麼區別?
Variadic function (va_arg) doesn't work with float?
有消息稱,這個問題是促進浮動當我們調用之類的東西
va_arg(arg, float)
翻番
我的問題是在這篇文章的末尾,但首先讓我們來看看@ Jack在上面鏈接的問題下的回答:
#include <stdio.h>
#include <stdarg.h>
void foo(int n, ...)
{
va_list vl;
va_start(vl, n);
int c;
double val;
for(c = 0; c < n; c++) {
val = va_arg(vl, double);
printf("%f\n", val);
}
va_end(vl);
}
int main(void)
{
foo(2, 3.3f, 4.4f);
return 0;
}
輸出:
3.300000
4.400000
現在,如果我們改變val = va_arg(vl, double)
成val = va_arg(vl, float)
,我們會得到(至少我得到了2012 MSVS):
36893488147419103000.000000
2.162500
讓我們去到我現在的問題。
在這個話題:C/C++ va_list not returning arguments properly 大多數投票的答案,這是評論說,printf
也促進float
年代到double
的。
但有什麼區別?如果兩者都將float
提升爲double
,爲什麼printf
正確寫入值,而va_arg
爲我們提供了這樣一個鼻子惡魔?
是什麼讓你認爲'printf'嘗試解析參數,它知道會被提升爲'double',如'float'? 'printf'函數總是知道'float'會被傳遞的'double'。你的功能沒有。這是不同的。 –
謝謝大家的好評!現在我明白了,不僅如何運作,還有更多。 – Kusavil