|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Добрый день Создаю два пустых проекта: одно консольное приложение Win32, а другое Qt приложение. Компиляция одного и того же кода в консольном приложении выдаёт предупреждения о небезопасных функциях, а в Qt приложении не выдаёт. Вот код (полный код файла main.cpp), он одинаковый в обоих проектах: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Конечно, в настройках проектов нет отключения предупреждений и нет определения макросов наподобие _CRT_SECURE_NO_WARNINGS. Но *компилируются* файлы по разному. Обратите внимание, даже в Qt-проекте в main.cpp отключены заголовочники самого Qt. На закладке Property Manager тоже всё идентично. Почему?! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:06 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Прошу прощения, в Qt приложении уровень предупреждений был 1. Но это не решает такой же проблемы в боевом Qt проекте, там уровень предупреждений стоит 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:21 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, Какими пунктами в меню создал проект? Я Qt Creater юзаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:23 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Petro123, В Студии меню: File - New - Project - Qt - Qt GUI Application. Где-то я упускаю мелочь какую-то. В исходных кодах боевого проекта предупреждения не отключаются, уровень предупреждений три, но нет самих предупреждений. Точнее они есть, но не для всех строковых функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:33 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, Нету п.п. Qt. Что надо сделать? Qt поставил. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:45 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Petro123, Поставить расширение Студии "Qt VS Tools". Но это уже не нужно, на тестовом проекте Qt предупреждения уже у меня есть. Я понять понять не могу почему их нет в боевом проекте Qt. Причем для функции sprintf() предупреждений нет, а для функции vsprintf() они есть - при компиляции одного и того же файла: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Ну как так? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 12:56 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Так же для vsprintf() не срабатывает замена на безопасный шаблон, хотя буфер в функцию передаётся статического размера (локальных массив char), а в проекте определено _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 При этом такая замена срабатывает для функции vsprintf_s(). Но для обоих этих функций есть ведь шаблонный вариант с автовыводом размера буфера. Глючит тут что-то... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 13:13 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++? Это имхо, так как я не сишник. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 13:49 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Petro123petrav, А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++? Это имхо, так как я не сишник. Видел. Но я глубоко не согласен с такой рекомендацией. Логику программы я стараюсь писать на С++. А тут речь вообще про старый Си-код, который переписывать не слишком оправдано... по многим причинам. Я стараюсь сделать его как можно более надёжным, он не очень хорошо написан. Но варнинги подвели пока что. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 15:27 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, Dll сделай с логикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 15:40 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, Иначе будет мешанина из QString и char. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 15:41 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Petro123petrav, А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++? Это имхо, так как я не сишник. обана! разочаровываешь ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 16:46 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Ролг Хупин, )) это ненадолго) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 16:57 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Ролг Хупин, Ну и интуиция меня не подвелла. Рекомендация есть такая) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 16:58 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Petro123petrav, Иначе будет мешанина из QString и char. Imho DLL нужна тогда, когда она нужна. При аккуратном и осмысленном распределении функционала по компонентам - там не будет мешанины между QString, std::string и char. Даже и без DLL. Точнее DLL к этому проектированию вообще не имеет никакого отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 19:19 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, У меня imho было. Делай. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 20:15 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
У меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?... И ещё вопрос, можно ли в 2017-й студии собрать Windows-2000-compatible? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 05:23 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
CEMbУ меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?... И ещё вопрос, можно ли в 2017-й студии собрать Windows-2000-compatible? Нет. Поддержку 2000 дропнули в VS2010 You can use VS 2010 to target Windows 2000 with the EncodePointer/DecodePointer trick. The issue here is that the VS 2010 C runtime library (CRT) requires these functions (it calls them internally), but these functions do not exist on versions of the OS prior to Windows XP SP2. https://stackoverflow.com/questions/19516796/visual-studio-2012-win32-project-targeting-windows-2000 VS2015 умеет собрать для XP VS2017 тоже - доустановить пакет "Поддержка WinXP для C++" Кстати, в C# поддержка .NET2.0 (2000 compatible) есть даже VS2019 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:09 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
CEMbУ меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?... Зачем? Это вопрос разработки безопасных и надёжных приложений. Да можно пользоваться опасной sprintf(). Если мы выбираем безопасные функции, то интереснее вопрос: что предпочтительнее snprintf() или sprintf_s()? Тут я не могу ответить конструктивно. И потому доверяю рекомендациям компилятора - выбираю _s версию. Вот на этот вопрос было бы интересно услышать мнение от людей, которые разбираются. Пожалуйста, ждём :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 15:11 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, надо стараться забыть (понятно в легаси не получается) и про sprintf и про asciiz строки и про рав-указатели использовать strstream и std:: в полный рост полумеры ни к чему. но можно прогнать через линтер и хотя бы очевидные баги засветятся ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 19:15 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petravЗачем?потому что в результате некоторым пользователям вываливается сообщение о необходимости установить C++ Runtime библиотеки. petravЭто вопрос разработки безопасных и надёжных приложений.Ну да, но это очень сильно зависит от самого разработчика. Siemarglиспользовать strstream и std:: в полный роста у меня вот такой вопрос по std::строкам: есть такой файл "tchar.h", который делает обвязку для stdio для случаев unicode vs multibyte. Ок. Почему ничего такого нету для std::string? Или есть? К примеру, у меня есть некоторые свои библиотеки кода, которые работают со строками и с бустом. При использовании их в разных проектах (unicode/multibyte) пришлось бы везде переправлять с string на wstring. Я сделал обвязку tstring по аналогии с tchar.h, и у меня теперь всё работает и там и там. Но я подозреваю, что так можно было и не делать. А как правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 06:06 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
petrav, делай сразу std::string строки. У тебяж С++ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 11:38 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
CEMbПочему ничего такого нету для std::string? Или есть? std::string == std::basic_string<char> std::wstring == std::basic_string<wchar_t> Что тебе мешает объявить std::tstring = std::basic_string<TCHAR>? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:20 |
|
VS2017: отсутствуют сообщения о небезопасных строковых функциях
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЧто тебе мешает объявить std::tstring = std::basic_string<TCHAR>?да ничего не мешает (я сделал же define), но обычно, в 99% случаев, когда что-то нужно что-то фундаментальное, обычно это уже сделано, просто про это не знаешь Поэтому я и спросил, раз уже сделали tchar, то логично предположить, что и какой-то tstring уже есть. Не, ну если нету, то нету, тогда я молодец ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2019, 05:33 |
|
|
start [/forum/topic.php?fid=57&msg=39807569&tid=2017618]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 399ms |
0 / 0 |