Все компиляторы C, которые я пробовал, не будут обнаруживать неинициализированные переменные в фрагменте кода ниже. Но дело здесь очевидно.
Не беспокойтесь о функциональности этого фрагмента. Это не настоящий код, и я убрал его для расследования этой проблемы.
BOOL NearEqual (int tauxprecis, int max, int value)
{
int tauxtrouve; // Not initialized at this point
int totaldiff; // Not initialized at this point
for (int i = 0; i < max; i++)
{
if (2 < totaldiff) // At this point totaldiff is not initialized
{
totaldiff = 2;
tauxtrouve = value; // Commenting this line out will produce warning
}
}
return tauxtrouve == tauxprecis ; // At this point tauxtrouve is potentially
// not initialized.
}
С другой стороны, если я прокомментирую tauxtrouve = value ;
, я получаю предупреждение "local variable 'tauxtrouve' used without having been initialized"
.
Я пробовал эти компиляторы:
- GCC 4.9.2 с -Wall -WExtra
- Microsoft Visual С++ 2013 с включенными предупреждениями