Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 4) C4706

przypisanie w wyrażeniu warunkowym

Wartość testowa w wyrażeniu warunkowym była wynikiem przypisania.

Przypisanie ma wartość (wartość po lewej stronie przypisania), która może być używana legalnie w innym wyrażeniu, w tym wyrażenie testowe.

Poniższy przykład generuje C4706:

// C4706a.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( a  = b ) // C4706
   {
   }
}

Ostrzeżenie będzie występować nawet wtedy, gdy podwoisz nawiasy wokół warunku testowego:

// C4706b.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( ( a  =  b ) ) // C4706
   {
   }
}

Jeśli twoim zamiarem jest przetestowanie relacji, a nie utworzenie przypisania, użyj == operatora . Na przykład następujący wiersz sprawdza, czy a i b są równe:

// C4706c.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( a == b )
   {
   }
}

Jeśli zamierzasz ustawić wartość testową jako wynik przypisania, przetestuj, aby upewnić się, że przypisanie nie ma wartości zerowej lub nie ma wartości null. Na przykład następujący kod nie wygeneruje tego ostrzeżenia:

// C4706d.cpp
// compile with: /W4
int main()
{
   int a = 0, b = 0;
   if ( ( a = b ) != 0 )
   {
   }
}