29 нояб. 2009 г.

Top level окна принимают WM_GETMINMAXINFO до WM_NCCREATE

Имейте в виду, что в Windows top level окна принимают соообщение WM_GETMINMAXINFO до WM_NCCREATE. Такое поведение может быть фатально для приложений, которые выполняют код инициализации в обработчике сообщения WM_NCCREATE, потому что окно, получившее WM_GETMINMAXINFO, еще не инициализировано.
О, этот жестокий, глупый мир...
переведено ksenks

Правильный способ проверить является ли C строка пустой

Правильный способ проверить является ли C строка пустой

Это делается так:
char *s;
// .. do something with s ...
if (!*s) printf("empty!\n");
или вот так:
if (0 == *s) printf("empty!\n");
Я предпочитаю второй вариант, на мой взгляд, он нагляднее. Но в принципе неважно, какой из этих способов использовать.

Наиболее популярные неправильные способы:
  • if (0 == strlen(s)) printf("empty\n");
  • if (0 == strcmp(s, "")) printf("OMG, empty!\n");
И это не шутка, сегодня я встретил такой код в двух независимых ревью.

P.S. Есть известная шутка о том, как иностранные программисты проверяют булевские переменные на истинность:
if (4 == strlen(bool2str(value))) printf("its true!\n");

переведено ksenks