Я тестирую атрибут C++17 fallthrough в Visual Studio. Код. Среда IDE настроена на компиляцию кода C/C++ с помощью компилятора Microsoft Visual Studio cl.exe. Мое определение задачи (в tasks.json
) для создания простого файла .cpp
в режиме DEBUG:
{
"type": "shell",
"label": "cl.exe: Build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${file}",
"/link",
"/OUT:${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$msCompile"
]
}
Это было проверено на нескольких программах и работает хорошо. Теперь я включаю оператор switch
, используя новый атрибут [[fallthrough]];
, и компилятор генерирует:
warning C5051: attribute 'fallthrough' requires at least '/std:c++17'; ignored
Добавление "/std:c++17",
к аргументам для cl.exe ничего не изменило (генерируется такое же предупреждение компилятора). Вот новая версия:
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"/std:c++17",
"${file}",
"/link",
"/OUT:${fileDirname}\\${fileBasenameNoExtension}.exe"
],
Насколько я вижу, мой синтаксис верен в соответствии с Документация Microsoft для указания языкового стандарта.
Что я делаю не так?
"compilerArgs"
вc_cpp_properties.json
? - person AlainD   schedule 15.07.2020"cppStandard": "c++17"
в файл\.vscode\c_cpp_properties.json
, но все равно получаю то же предупреждениеrequires c++17 ...ignored
. Синтаксис довольно громоздкий! - person AlainD   schedule 16.07.2020cl.exe
в параметре"includePath"
дляc_cpp_properties.json
и НЕ ЗАПУСКУVisual Studio Command Prompt
, компиляция завершится ошибкой с'cl.exe' is not recognized as an internal or external command
. Я думаю, что мойc_cpp_properties.json
не берется и не применяется, и я не понимаю, почему. - person AlainD   schedule 16.07.2020.json
? Если вы используете командную строку VS Developers (сcmd.exe
илиPowerShell
), просто скомпилируйте свою программу, напримерcl /Zi /EHsc /FeYourExeName /std:c++17 YourSource.cpp
(вы должны добавить/W3
, чтобы включить полные предупреждения. Вы можете добавить/Fo...
, чтобы указать имя объектного файла, если хотите. Дело в том, что если вы компилируете из командной строки, файл.json
не требуется. Простой файл.bat
может обрабатывать ваше имя файла, имя объекта и аргументы exename. - person David C. Rankin   schedule 24.11.2020