編譯器警告 (層級 1) C4477
'function':格式字串 'string' 需要類型 'type' 的引數,但 variadic 引數 number 的類型為 'type'
編譯程式偵測到滿足格式字串中佔位元元所需的自變數類型與提供的自變數類型不符。 正確使用 variadic 函式的 printf 和 scanf 系列,需要您提供格式字串所指定類型的自變數。 不相符通常表示您的程式代碼中有錯誤。
如需與 printf 系列格式字串佔位元元相關聯的自變數資訊,請參閱 格式規格語法:printf 和 wprintf 函式。 如需函式的特定資訊,請參閱檔。
此警告是Visual Studio 2015的新功能。
範例
此範例顯示第一個printf_s函式的兩個 C4477 警告,當發現兩個自變數屬於錯誤的類型時,也會示範如何修正問題。
// C4477p.cpp
// compile with: cl /c /W4 C4477p.cpp
#include <stdio.h>
void print_func(int a, float f)
{
printf_s("This takes int and double arguments %d and %f.\n", f, a); // C4477, expected int then double
printf_s("This takes int and double arguments %d and %f.\n", a, f); // fix: types in correct order
}
在第一個 double
錯誤訊息中,編譯程式會偵測預期時提供 int
自變數。 會自動 float
升階為 double
variadic 自變數清單中的 。 第二個錯誤訊息顯示編譯程式預期有自 double
變數,但 int
已提供 。 編譯程式無法判斷您已交換自變數的順序。 您必須檢查格式字串,以判斷實際的自變數順序,並提供正確的自變數類型。