Le compilateur Visual Studio ne semble pas avertir sur les affectations signées/non signées, uniquement sur les comparaisons. Par exemple, le code ci-dessous génère un avertissement sur l'instruction if mais pas sur les affectations initiales.Faire compilateur VS attraper les assignations signées/non signées?
est-il de toute façon de le faire attraper ces? Je suis déjà à W4 mais j'ai pensé (espéré) qu'il pourrait y avoir un autre réglage quelque part.
Merci,
int foo(void)
{
unsigned int fooUnsigned = 0xffffffff;
int fooSigned = fooUnsigned; // no warning
if (fooSigned < fooUnsigned) // warning
{
return 0;
}
return fooSigned;
}
Mise à jour:
Quamrana est juste, cela est contrôlé par avertissement 4365 qui semble être désactivé par défaut, même à W4. Cependant, vous pouvez explicitement l'activer pour un niveau d'avertissement donné comme ça;
#pragma warning (4 : 4365)
Ce qui résulte en;
warning C4365: 'initializing' : conversion from 'unsigned int' to 'int', signed/unsigned mismatch
Je ne savais pas qu'il y avait un #pragma pour transformer les avertissements sur. Le problème avec le #pragma est qu'il doit être répété dans chaque module où vous voulez l'avertissement. – quamrana