Pull to refresh

Comments 26

UFO just landed and posted this here
Data.pTo = L"";

Предупреждение PVS-Studio: V540 Member 'pTo' should point to string terminated by two 0 characters. common.cpp 1659
В C++ Builder sizeof(*L"") == sizeof(wchar_t) == 2 * sizeof(char) == 2, так что ошибки тут нет. Но с точки зрения теоретического С++ верно.
А если подумать? :)

Даю подсказку:
Вы хотите сказать, что (wchar *) неявно приводится к (char *)?
А если нет, то почему и что из этого следует?
В MSDN даже пример для «знатоков» есть:


// WRONG
LPTSTR pszSource = L"C:\\Windows\\*";

// RIGHT
LPTSTR pszSource = L"C:\\Windows\\*\0";

Лучше и здесь писать PCZZTSTR тогда.
А это по стандарту? Или фишка VisualC? MinGW генерирует 2 нуля
Эх…
Предлагаю внимательно прочитать: msdn.microsoft.com/en-us/library/windows/desktop/bb759795%28v=vs.85%29.aspx
И осознать.
Фишек тут никаких нет. Есть непонимание, что должно быть 2 нулевых байта (если char *) и 4 нулевых байта (если wchar_t *).
Спасибо, почитал еще более внимательно и нашел, что double null-terminating — это просто требование для конкретной функции, где на вход может быть подано несколько файловых путей за раз, каждый из которых является простой null-teminated строкой (два 0 для wchar), а вся последовательность терминируется дополнительным нулем (еще 2 нуля).
Получается, что инструмент очень умный и проверил, что параметр не простой, а для особой функции. Уф, а то я уже стал сомневаться в собственном рассудке.
О, погуглил, там PCZZTSTR раскрывающийся в wchar_t*, и в конце должно стоять два (wchar_t)0. Тогда действительно предупреждение верное. Спасибо, не знал про существование такой штуки (ох уж этот WinAPI).
UFO just landed and posted this here
Если абстрагироваться от существующего программного продукта, то можно подставив другой нужный программный продукт сделать анализатор для любого языка :-). Но мы про C/C++ пока.
Вряд ли в рамках такой задачи можно абстрагироваться, ведь, как я понимаю, анализатор ориентирован в том числе на неправильное использование API (будь то STL, POSIX или WinAPI). Так что дело одной грамматикой не обойдется.
UFO just landed and posted this here
UFO just landed and posted this here
Большинство ошибок, которые описываются в статьях Andrey2008, на Яве просто невозможны.
Для Явы своих инструментов хватает, едва ли уступающих в дотошности PVS-Studio. FindBugs, например.
UFO just landed and posted this here
Первое утверждение остается верным для большинства современных языков
Где вы, программисты, использующие Embarcadero RAD Studio? Ау!

Ну я пишу на билдере и 2е знакомых специалиста тоже пишут на билдере, только мы программисты встраиваемых систем
Вот такой вот подход:
LOGFONT AFont = LOGFONT();

Позволяет забыть как все эти ручные memset'ы как дурной сон. Абсолютно стандартный, наглядный, невозможно перепутать типы или обнулить что-то не правильно. И даже если тип потом станет non-POD, код останется корректным.
SHFILEOPSTRUCT

Меня всегда умиляли такие названия типов. Прям черное наречие!
Друзья, спасибо Вам за вашу работу! :) Но есть пожелание — протестируйте ядро Linux апстрим версии? Уверен, там можно внести огромный вклад в фикс неоднозначностей.
Если еще не сделали, то это классная идея :)
Only those users with full accounts are able to leave comments. Log in, please.