Derleyici Uyarısı (düzey 1) C4477
'function' : 'string' biçim dizesi 'type' türünde bir bağımsız değişken gerektirir, ancak variadic bağımsız değişken numarası 'type' türündedir
Derleyici, bir biçim dizesindeki yer tutucuyu karşılamak için gereken bağımsız değişken türüyle sağlanan bağımsız değişkenin türü arasında bir uyuşmazlık algılamıştı. Variadic işlevlerin printf ve scanf ailelerinin doğru kullanımı, biçim dizesi tarafından belirtilen türlerin bağımsız değişkenlerini sağlamanızı gerektirir. Uyuşmazlık genellikle kodunuzda bir hata olduğu anlamına gelir.
printf ailesi biçim dizesi yer tutucularıyla ilişkili bağımsız değişkenler hakkında bilgi için bkz . Biçim belirtimi söz dizimi: printf ve wprintf işlevleri. İşlev işlevine özgü bilgiler için belgelere bakın.
Bu uyarı Visual Studio 2015'te yenidir.
Örnek
Bu örnek, iki bağımsız değişkenin yanlış türde olduğu belirlendiğinde ilk printf_s işlevi için iki C4477 uyarısı gösterir ve ayrıca sorunların nasıl düzeltileceğini gösterir.
// 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
}
İlk hata iletisinde, derleyici bir bağımsız değişkenin double
beklendiğinde int
sağlandığını algılar. A float
, değişken bağımsız değişken listesinde otomatik olarak yükseltilir double
. İkinci hata iletisi, derleyicinin bir double
bağımsız değişken beklediğini ancak sağlandığını int
gösterir. Derleyici, bağımsız değişkenlerin sırasını değiştirdiğinizden emin olamaz. Gerçek bağımsız değişken sırasını belirlemek ve doğru bağımsız değişken türlerini sağlamak için biçim dizesini incelemeniz gerekir.