我有以下函數將傳遞的參數寫入二進制文件。va_arg中的字符類型
void writeFile(FILE *fp, const int numOfChars, ...)
{
va_list ap;
va_start(ap, numOfChars);
for(int i = 0; i < numOfChars; i++)
{
const char c = va_arg(ap, char);
putc(c, fp);
}
va_end(ap);
}
編譯後,我從編譯器
warning: second argument to 'va_arg' is of promotable type 'char'; this va_arg
has undefined behavior because arguments will be promoted to 'int' [- Wvarargs]
收到以下警告現在,據我所知,C要推動char類型爲int。爲什麼C想要這樣做?其次,是將int轉換回char的最佳解決方案嗎?
不需要強制轉換或隱式轉換。查看我的(更新的)答案的結尾。 – 2015-01-21 15:55:14
@KeithThompson你是什麼意思,不需要隱式轉換?因爲它沒有定義,所以你不能寫'char ch = va_arg(ap,char)'?如果你想從參數列表中取出一個'char',你必須將'int'傳遞給'va_arg',這是不是正確的? – 2015-01-21 18:05:22
我的意思是正確的代碼是'int c = va_arg(ap,int); putc(c,fp);'。你可以讓'c'成爲'char',但是由於'putc()'接受了'int'的參數,所以沒有太多意義。 – 2015-01-21 18:13:45