Comments 25
UFO just landed and posted this here
В C++ BuilderData.pTo = L"";
Предупреждение PVS-Studio: V540 Member 'pTo' should point to string terminated by two 0 characters. common.cpp 1659
sizeof(*L"") == sizeof(wchar_t) == 2 * sizeof(char) == 2
, так что ошибки тут нет. Но с точки зрения теоретического С++ верно.+1
А если подумать? :)
Даю подсказку:
Вы хотите сказать, что (wchar *) неявно приводится к (char *)?
А если нет, то почему и что из этого следует?
Даю подсказку:
Вы хотите сказать, что (wchar *) неявно приводится к (char *)?
А если нет, то почему и что из этого следует?
+2
В MSDN даже пример для «знатоков» есть:
// WRONG LPTSTR pszSource = L"C:\\Windows\\*"; // RIGHT LPTSTR pszSource = L"C:\\Windows\\*\0";
+2
Лучше и здесь писать
PCZZTSTR
тогда.0
А это по стандарту? Или фишка VisualC? MinGW генерирует 2 нуля
0
Эх…
Предлагаю внимательно прочитать: msdn.microsoft.com/en-us/library/windows/desktop/bb759795%28v=vs.85%29.aspx
И осознать.
Фишек тут никаких нет. Есть непонимание, что должно быть 2 нулевых байта (если char *) и 4 нулевых байта (если wchar_t *).
Предлагаю внимательно прочитать: msdn.microsoft.com/en-us/library/windows/desktop/bb759795%28v=vs.85%29.aspx
И осознать.
Фишек тут никаких нет. Есть непонимание, что должно быть 2 нулевых байта (если char *) и 4 нулевых байта (если wchar_t *).
0
Спасибо, почитал еще более внимательно и нашел, что double null-terminating — это просто требование для конкретной функции, где на вход может быть подано несколько файловых путей за раз, каждый из которых является простой null-teminated строкой (два 0 для wchar), а вся последовательность терминируется дополнительным нулем (еще 2 нуля).
Получается, что инструмент очень умный и проверил, что параметр не простой, а для особой функции. Уф, а то я уже стал сомневаться в собственном рассудке.
Получается, что инструмент очень умный и проверил, что параметр не простой, а для особой функции. Уф, а то я уже стал сомневаться в собственном рассудке.
+3
О, погуглил, там
PCZZTSTR
раскрывающийся в wchar_t*
, и в конце должно стоять два (wchar_t)0
. Тогда действительно предупреждение верное. Спасибо, не знал про существование такой штуки (ох уж этот WinAPI).+11
UFO just landed and posted this here
Если абстрагироваться от существующего программного продукта, то можно подставив другой нужный программный продукт сделать анализатор для любого языка :-). Но мы про C/C++ пока.
+4
Вряд ли в рамках такой задачи можно абстрагироваться, ведь, как я понимаю, анализатор ориентирован в том числе на неправильное использование API (будь то STL, POSIX или WinAPI). Так что дело одной грамматикой не обойдется.
0
Большинство ошибок, которые описываются в статьях Andrey2008, на Яве просто невозможны.
Для Явы своих инструментов хватает, едва ли уступающих в дотошности PVS-Studio. FindBugs, например.
Для Явы своих инструментов хватает, едва ли уступающих в дотошности PVS-Studio. FindBugs, например.
0
Где вы, программисты, использующие Embarcadero RAD Studio? Ау!
Ну я пишу на билдере и 2е знакомых специалиста тоже пишут на билдере, только мы программисты встраиваемых систем
+3
Вот такой вот подход:
Позволяет забыть как все эти ручные
LOGFONT AFont = LOGFONT();
Позволяет забыть как все эти ручные
memset
'ы как дурной сон. Абсолютно стандартный, наглядный, невозможно перепутать типы или обнулить что-то не правильно. И даже если тип потом станет non-POD, код останется корректным.+1
SHFILEOPSTRUCT
Меня всегда умиляли такие названия типов. Прям черное наречие!
0
Друзья, спасибо Вам за вашу работу! :) Но есть пожелание — протестируйте ядро Linux апстрим версии? Уверен, там можно внести огромный вклад в фикс неоднозначностей.
0
Sign up to leave a comment.
Проверка открытого проекта WinSCP, разрабатываемого в Embarcadero C++ Builder