Aracılığıyla paylaş


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.