Запись архива

Как настроить VS Code для C и C++: компилятор, сборка и отладчик

Чтобы писать на C в VS Code, одного расширения C/C++ недостаточно. Редактор показывает код и запускает инструменты, компилятор создаёт программу, а отладчик позволяет останавливать её на выбранной строке. Эти части…

Как настроить VS Code для C и C++: компилятор, сборка и отладчик

Чтобы писать на C в VS Code, одного расширения C/C++ недостаточно. Редактор показывает код и запускает инструменты, компилятор создаёт программу, а отладчик позволяет останавливать её на выбранной строке. Эти части устанавливаются и проверяются отдельно.

Основной маршрут ниже рассчитан на Windows x64 и GCC из MSYS2. Он доводит небольшой проект на C до работающей сборки и F5. В конце объясним отличия для C++, Linux, macOS и полноценной Visual Studio. Не смешивайте настройки этих сред в одном конфиге.

Что нужно установить

Понадобятся настольный VS Code, расширение C/C++ от Microsoft (ms-vscode.cpptools) и набор инструментов GCC/GDB. Code Runner для этого проекта не требуется.

В Windows установите MSYS2 с официального сайта. При стандартном пути установки каталог будет C:msys64. Выполните в терминале MSYS2, не в PowerShell:

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

Выберите предложенный набор пакетов и дождитесь завершения. Добавьте C:msys64ucrt64bin отдельной записью в пользовательский PATH Windows. Существующее содержимое PATH сохраняйте. Если установили MSYS2 в другое место, путь нужно изменить.

Закройте VS Code полностью, откройте его заново и проверьте в новом терминале:

gcc --version
g++ --version
gdb --version
where.exe gcc

Первые команды должны показать версии, последняя помогает найти конкурирующие установки компилятора. Маршрут UCRT64 соответствует инструкции Microsoft по GCC/MinGW. Не подставляйте в эти примеры старые пути mingw32 или mingw64, если установили UCRT64.

Сначала соберите программу без кнопок редактора

Создайте папку c-start, откройте её через File → Open Folder и добавьте main.c:

#include <stdio.h>

int main(void) {
    int price = 350;
    int quantity = 3;
    int total = price * quantity;
    printf("Total: %dn", total);
    return 0;
}

Сохраните файл. В PowerShell из этой папки выполните:

gcc -std=c17 -Wall -Wextra -g -O0 main.c -o main.exe
.main.exe

Ожидаемый вывод: Total: 1050. Если компиляция завершилась ошибкой, сначала исправьте её; не запускайте старый main.exe и не принимайте его результат за результат новой сборки.

-std=c17 задаёт стандарт языка, -Wall -Wextra включают дополнительные предупреждения, -g добавляет сведения для отладки, -O0 отключает оптимизацию. Для учебной пошаговой проверки это удобнее, чем оптимизированная сборка, в которой переменные и строки могут не соответствовать привычному порядку. Назначение ключей изложено в справочнике GCC.

Проверка в терминале отделяет проблему компилятора от проблемы интерфейса. Если команда работает, установочная часть завершена и можно настраивать автоматический запуск.

Как настроить tasks.json

Создайте в проекте папку .vscode, а в ней tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build-c",
      "type": "process",
      "command": "C:/msys64/ucrt64/bin/gcc.exe",
      "args": [
        "-std=c17", "-Wall", "-Wextra", "-g", "-O0",
        "${workspaceFolder}/main.c",
        "-o", "${workspaceFolder}/main.exe"
      ],
      "options": { "cwd": "${workspaceFolder}" },
      "problemMatcher": ["$gcc"],
      "group": { "kind": "build", "isDefault": true }
    }
  ]
}

Нажмите Ctrl+Shift+B. Здесь явно указан main.c, поэтому результат не зависит от активной вкладки. Вы можете редактировать README или настройки и всё равно собирать тот же пример.

Задача типа process передаёт аргументы программе без дополнительной обработки командной оболочкой. Это уменьшает число проблем с кавычками и путями. Область применения переменных и структуру задач описывает документация VS Code Tasks.

Не используйте этот однофайловый шаблон как готовую сборочную систему для любого проекта. Если добавили utils.c, его тоже нужно передать компилятору. Для растущей программы разумнее описать состав проекта в CMake или другой системе сборки, а из VS Code вызывать уже её.

Как настроить launch.json и F5

В той же папке создайте launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug C: main",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/main.exe",
      "cwd": "${workspaceFolder}",
      "args": [],
      "stopAtEntry": false,
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe",
      "preLaunchTask": "build-c"
    }
  ]
}

Поставьте точку останова на строке вычисления total и нажмите F5. Выполните строку шагом и проверьте, что total стал равен 1050. Значение preLaunchTask должно в точности совпадать с label задачи. Тогда перед отладкой редактор пересоберёт программу.

Если редактор предлагает продолжить после ошибки сборки, отмените запуск. Иначе можно отлаживать оставшийся от прошлого запуска файл. Поля program, MIMode и miDebuggerPath относятся к конфигурации отладчика C/C++.

Зачем нужен c_cpp_properties.json

Этот файл настраивает анализ кода и IntelliSense, но не заменяет команду компиляции. Если программа собирается, а stdio.h подчёркнут, выполните C/C++: Edit Configurations (UI) и выберите установленный GCC в Compiler path.

Для ручной настройки данного Windows-примера можно использовать .vscode/c_cpp_properties.json:

{
  "version": 4,
  "configurations": [
    {
      "name": "Windows UCRT64",
      "compilerPath": "C:/msys64/ucrt64/bin/gcc.exe",
      "intelliSenseMode": "windows-gcc-x64",
      "cStandard": "c17",
      "cppStandard": "c++20",
      "includePath": ["${workspaceFolder}/**"]
    }
  ]
}

Не добавляйте вручную все системные папки заголовков, если расширение может опросить правильный компилятор. В крупных проектах анализатор лучше связывать с реальными командами сборки, например через compile_commands.json. Параметры объяснены в справочнике C/C++ properties.

Что поменять для C++

Файл C++ обычно имеет расширение .cpp; для обычной сборки используйте g++. В задаче замените компилятор на g++.exe, main.c на main.cpp, а -std=c17 на выбранный стандарт C++, например -std=c++20.

Не компилируйте учебную программу на C через g++ только потому, что такая команда оказалась в чужой инструкции. C и C++ не взаимозаменяемы: отличаются правила языка и линковка. Если искали «как настроить VS Code для си», основной пример выше относится именно к C.

А если Linux, macOS или Visual Studio?

В Ubuntu/Debian типичный набор для этого маршрута устанавливают командой sudo apt install build-essential gdb. После установки проверяют gcc --version и gdb --version, собирают gcc -std=c17 -Wall -Wextra -g -O0 main.c -o main и запускают ./main. В конфигурациях нужны Linux-пути, например /usr/bin/gcc, и имя программы без .exe.

На macOS обычный путь начинается с Apple Command Line Tools и Clang. Не копируйте Windows-путь GDB: для macOS используйте отдельную инструкцию Microsoft по Clang. Набор инструментов и отладчик должны соответствовать платформе.

Если под «VS» вы имели в виду Visual Studio, начните с рабочей нагрузки Desktop development with C++ в Visual Studio Installer. Там другой механизм настройки проекта; пример MSYS2 не является обязательным шагом. Для C используйте исходники .c и параметры проекта под нужный стандарт. Установка описана в документации Microsoft C++ tools.

Как быстро найти причину ошибки

Ошибка Возможная причина Следующее действие
gcc не найден PATH или отсутствие toolchain Проверить файл компилятора и перезапустить VS Code
main.exe не существует Сборка не прошла либо другой выходной путь Прочитать ошибки сборки, сравнить -o и program
miDebuggerPath неверен GDB не установлен или указан чужой путь Проверить gdb --version и файл по пути
Точка останова не срабатывает Старый бинарник, нет -g, другая программа Пересобрать и проверить профиль запуска
undefined reference Не скомпонован нужный исходник или библиотека Проверить состав команды, не только includePath
stdio.h подчёркнут, сборка успешна Неверная конфигурация IntelliSense Проверить compilerPath

Если проблемы начинаются ещё до компилятора, используйте гайд по терминалу. Рабочую конфигурацию сборки и отладки стоит сохранить в Git, предварительно решив, какие пути можно разделять с командой.