Дело в том, что использование присваивания внутри тела условия для if
, while
или for
является совершенно допустимым C и очень часто используется намеренно.Например, я часто использую следующий скелетный код для создания окна при написании графического интерфейса Win32 API:
if((hWnd = CreateWindowExW(...)) == NULL)
{
MessageBoxW(NULL, L"Window creation failed", L"Error", MB_OK | MB_ICONSTOP);
return GetLastError();
}
Если тест предназначен исключительно для равенства и вы хотите избежать использования оператора =
случайно одна вещь, которую вы можете сделать, это привыкнуть помещать значение r в левую часть оператора, так что, если вы случайно используете =
, это вызовет ошибку компиляции:
char *p = malloc(100000);
if(NULL == p)
{
// handle null pointer
}
Очевидно, что это работает, только если хотя бы одна сторона сравнения является r-значением или const
переменной.