Как стать автором
Обновить

Комментарии 25

НЛО прилетело и опубликовало эту надпись здесь
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).
НЛО прилетело и опубликовало эту надпись здесь
Если абстрагироваться от существующего программного продукта, то можно подставив другой нужный программный продукт сделать анализатор для любого языка :-). Но мы про C/C++ пока.
Вряд ли в рамках такой задачи можно абстрагироваться, ведь, как я понимаю, анализатор ориентирован в том числе на неправильное использование API (будь то STL, POSIX или WinAPI). Так что дело одной грамматикой не обойдется.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Большинство ошибок, которые описываются в статьях Andrey2008, на Яве просто невозможны.
Для Явы своих инструментов хватает, едва ли уступающих в дотошности PVS-Studio. FindBugs, например.
НЛО прилетело и опубликовало эту надпись здесь
Первое утверждение остается верным для большинства современных языков
Где вы, программисты, использующие Embarcadero RAD Studio? Ау!

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

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

Меня всегда умиляли такие названия типов. Прям черное наречие!
Друзья, спасибо Вам за вашу работу! :) Но есть пожелание — протестируйте ядро Linux апстрим версии? Уверен, там можно внести огромный вклад в фикс неоднозначностей.
Если еще не сделали, то это классная идея :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий