在這段代碼中,multiply 函式的回傳型別是 char。顯然,我正在回傳一個 double 值并使用 double 格式說明符進行列印,它給出了適當的值。如果我嘗試使用 %c 格式說明符列印,它不會列印任何內容。無論哪種方式,它不應該給出錯誤嗎?
#include <math.h>
#include <stdio.h>
char multiply(double x, double y)
{
return (double)(x * y);
}
int main() {
double x = 10, y = 20;
printf("%f", multiply(x, y));
}
uj5u.com熱心網友回復:
實際上,C 不允許這樣做。
顯然,我回傳一個 double 值并使用 double 格式說明符列印,它給出了適當的值
不,您不會回傳 type 的值double。該值char在函式離開之前被轉換為。這稱為隱式轉換。
使用格式說明符%f需要一個型別為 的引數double。相反,您傳遞 achar被提升為int可變引數函式。此引數不匹配會導致未定義的行為。如果結果看起來像您想要的那樣,那只是偶然。
如果我嘗試使用 %c 格式說明符列印,它不會列印任何內容。
你多個10*20. 如果列印該值,您期望什么結果200?如果您char已簽名,則此值會溢位為負值。這不是有效的 ASCII 值,可能沒有可列印的值。
無論哪種方式,它不應該給出錯誤嗎?
至少你應該得到一些警告。我不確定隱式轉換,但肯定是printf.
如果您沒有收到,請調高警告級別。對于 GCC 使用-Wall -Wextra.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/342942.html
上一篇:在函式中使用大括號的問題
下一篇:JS函式引數被宣告但從不讀取
