>개발 도구 >VSCode >VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

青灯夜游
青灯夜游앞으로
2020-09-16 11:32:1010320검색

VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

관련 권장 사항: "vscode 기본 튜토리얼"

0. 서문

이 문서는 초보자를 위한 것이며 모든 단계가 자세히 설명되어 있습니다. 명령줄, 프로그램 컴파일 및 디버깅, VS Code 사용에 대한 지식을 알아보려면 이 문서를 읽어보세요. 이 기사가 번거롭다면 간단한 버전을 제공하겠습니다. gcc 및 c/c++ 확장을 설치하고, 폴더를 열고, 오픈 소스 코드 F1을 클릭하고, 활성 파일을 빌드 및 디버그하면 완료됩니다.

이 문서의 많은 내용은 공식 VS Code 문서(Visual Studio Code를 사용한 C++ 프로그래밍 및 각 확장에 대한 문서)에서 얻을 수 있으며 해당 내용도 업데이트될 예정입니다(이 문서도 몇 가지 주요 업데이트를 거쳤습니다). 업데이트하고 싶으신가요? 자세한 내용을 보려면 가서 확인하세요. 본 글은 기본적으로 여러번 시도한 결과입니다. 오류가 있으면 지적해 주시기 바랍니다.

최종 효과: 컴파일 단계 중 오류, 코드 조각, 완성, 서식 지정, 단일 파일 컴파일 및 디버깅을 실시간으로 표시합니다.

1. 환경 준비

VSC 공식 홈페이지, 다운로드, 설치에 대해서는 자세히 다루지 않겠습니다. VSC는 IDE(통합 개발 환경)가 아닌 단순한 텍스트 editor(에디터)입니다. 컴파일러(컴파일러) 및 기타 여러 기능이 포함되어 있지 않으므로 컴파일러를 직접 설치해야 합니다.

컴파일러 다운로드: MinGW-w64 - 32비트 및 64비트 Windows용 조금 아래로 스크롤하여 최신 버전에서 x86_64-posix-seh를 선택하세요. x86_64-posix-seh。最好不要用 Download Latest Version,这个是在线安装包,可能因为国内的“网络环境”下载失败。如果浏览器下载失败就换迅雷下或者连手机开的热点下,还失败,那就使用能访问Google的那种方法下。

“安装”编译器:下下来的是一个7z的压缩包。如果你不会解压可以百度“压缩包怎么解压”。解压完了放到一个不容易被删的地方,层叠的可以去掉一些。看好bin文件夹的完整路径,我图里的是C:mingw64bin,把它加到环境变量中的PATH里去。如果你不会这一步,看本文最后面的“B. 如何添加环境变量”(可以在本页用Ctrl+F搜索)

Debian系Linux用sudo apt update; sudo apt install build-essential即可。

VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

顺序不重要;路径可以不一样,反正保证gcc.exe在那个文件夹里就行

验证

按Win+R,运行cmd(不要跳这一步),输入gcc,应该会提示 no input files 而不是“不是内部命令或外部命令”或者“无法将 "gcc" 项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。如果是“不是内部命令或外部命令”,说明gcc在的文件夹没有在环境变量的Path中,要加进去才行。如果加了还是这样,重启。如果重启了还不行,那就是你自己进行的操作有问题。

gcc -v최신 버전 다운로드는 사용하지 않는 것이 가장 좋습니다. 온라인 설치 패키지이므로 국내 '네트워크 환경'으로 인해 다운로드가 실패할 수 있습니다. 브라우저 다운로드가 실패하면 썬더를 통해 다운로드를 시도하거나 휴대폰 핫스팟에 연결해 보시고, 그래도 실패한다면 구글에 접속할 수 있는 방법을 이용해 보세요. 컴파일러 "설치": 7z 압축 패키지가 내려옵니다. 압축을 푸는 방법을 모르신다면 바이두에서 "압축된 패키지의 압축을 푸는 방법"을 검색해 보세요. 압축을 푼 후, 쉽게 삭제되지 않는 곳에 넣어두시면, 겹치는 파일 중 일부를 제거하실 수 있습니다. 내 그림에서는 bin 폴더의 전체 경로가 C:mingw64bin이고 이를 환경 변수의 PATH에 추가합니다. 이 단계를 수행하는 방법을 모르면 이 문서 마지막에 있는 "B. 환경 변수 추가 방법"을 참조하세요. (이 페이지에서는 Ctrl+F로 검색할 수 있습니다.)

Debian Linux의 경우 를 사용하세요. sudo apt update; sudo apt install build-essential 끝입니다.

VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
🎜🎜🎜🎜
순서는 중요하지 않습니다. 경로는 다를 수 있습니다. 어쨌든 gcc.exe가 해당 폴더에 있는지 확인하세요.

확인

🎜을 누르세요. Win+R, cmd를 실행하고(이 단계를 건너뛰지 마세요) gcc를 입력하세요. "내부 또는 외부 명령이 아닙니다" 또는 ""gcc를 인식할 수 없습니다" 대신 입력 파일이 없습니다라는 메시지가 표시되어야 합니다. " cmdlet, 함수 또는 스크립트로서의 항목. 파일 또는 실행 프로그램의 이름". "내부 명령이나 외부 명령이 아니다"라면 gcc가 위치한 폴더가 환경변수의 Path에 없다는 의미이므로 추가가 필요합니다. 추가한 후에도 문제가 지속되면 다시 시작하세요. 다시 시작한 후에도 여전히 작동하지 않으면 자체 작업에 문제가 있는 것입니다. 🎜🎜gcc 버전을 표시하려면 gcc -v를 입력하세요. 표시된 버전이 방금 다운로드한 버전과 다르거나 이전 버전인 경우 Path에 이전 버전의 컴파일러가 있다는 의미이며, 이는 다른 IDE를 설치하여 설치되었을 수 있습니다. Path에서 원래 gcc 경로를 제거해야 합니다. 🎜🎜이 두 가지 확인 🎜은 🎜을 준수해야 하며, 그렇지 않으면 환경 변수를 수정해야 합니다. 실수로🎜삭제🎜하지 않도록 주의하세요. 🎜
VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
이제 삐걱거리는 소리에 대해 걱정하지 마세요. 뭔가 잘못될 것입니다. clang 튜토리얼은 이 글의 뒤쪽으로 옮겼습니다
VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
gcc -v 출력의 마지막 줄을 입력하세요. 버전은 사용자 버전과 일치해야 합니다. 예를 들어 64비트에는 x86_64 및 seh

설치 확장이 있어야 합니다

  • C/C++: cpptools라고도 하며 디버그 및 형식 기능 제공
  • Code Runner: 컴파일하려면 마우스 오른쪽 버튼을 클릭하세요. 단일 파일을 실행하는 것은 매우 편리하지만 디버그할 수는 없습니다

기타 선택적 확장:

  • Bracket 쌍 Colorizer 2: 무지개 교정기
  • One Dark Pro: 아마도 VS Code에 가장 많이 설치된 테마

아닙니다. 권장/ 설치할 필요가 없는 확장 프로그램:

  • GBKtoUTF8: GBK 인코딩 문서를 UTF8 인코딩 문서로 변환합니다. 이 확장은 오랫동안 업데이트되지 않았으며 심각한 버그가 있을 수 있습니다
  • C++ Intellisense: 이 기사의 첫 번째 버전에서 선택한 gtags를 사용합니다. 효과는 매우 일반적입니다.
  • Include Autocomplete: 헤더 파일 이름 완성 기능을 제공합니다. 이제 cpptools 및 vscode-clangd에는 이미 이 기능이 있으므로 설치할 필요가 없습니다.
  • C/C++ 스니펫: 스니펫은 코드 블록을 재사용하고 효과는 Baidu의 것입니다. 비록 이 확장 프로그램의 설치 양이 높지만 개인적으로 cpptools 및 clangd도 일부 제공되지 않는다고 생각합니다. 다른 스니펫 확장 프로그램을 선택하거나 직접 정의할 수도 있습니다

보충 지식

  • 컴파일러는 소스이고, 코드는 실행 파일로 바뀌고, 에디터는 입력하는 소프트웨어입니다. 메모장은 편집자이고, VSC도 편집자입니다. 편집기는 프로그램을 컴파일하고 실행할 수 없습니다, 그것이 컴파일러의 일이기 때문입니다
  • MinGW는 Windows에서 gcc의 포트입니다. gcc는 세계에서 가장 인기 있는 C/C++ 컴파일러 조합입니다. 그러나 gcc라는 이름은 C 언어를 컴파일하는 프로그램을 나타내기도 하며, g++는 C++ 컴파일러를 의미합니다. 즉 gcc 제품군과 MinGW에는 gcc 프로그램과 g++ 프로그램이 포함되어 있습니다. 다른 프로젝트. 편의상 이 문서의 MinGW는 실제로 MinGW-w64를 나타냅니다. MinGW 자체는 오랫동안 업데이트되지 않았으니 사용하지 마세요 앗, 알고 보니 MinGW는 살아있지만 32비트 프로그램만 생성할 수 있습니다
  • 확장자는 확장입니다, 플러그인은 플러그인이고 VSC는 전자를 사용합니다. 대부분의 기사에서는 두 가지를 혼합하여 사용하는데, 이는 엄격하지는 않지만 이해할 수 있는 주요 모순을 파악하는 방법을 배워야 합니다. 물론 이 기사에 사용된 모든 내용은 정확합니다
  • 선택 사항:
  • [Popular Science][FAQ]MinGW 대 MinGW-W64 및 기타
  • 2. 여러 .json 파일을 구성합니다

계획한 파일을 만듭니다. 작업 공간 폴더라는 코드 폴더를 저장합니다.

경로에는 한자와 따옴표가 포함될 수 없으며 공백이 없는 것이 가장 좋습니다. C:VS-Code-C. 가상 작업 공간을 사용하지 않는 한 C와 C++는 각각 다른 폴더를 만들어야 합니다. 이전 섹션에서 컴파일러가 저장된 폴더를 선택하지 마십시오. 소스 코드와 컴파일러는 별도로 보관되어야 합니다.

VSC 열기, 폴더 열기 선택C:VS-Code-C。C和C++需要分别建立不同的文件夹,除非用虚拟工作区。不要选上一节存放编译器的文件夹,源代码和编译器要分开放。

打开VSC,选打开文件夹;最好不要选“添加工作区文件夹”,这个就是虚拟工作区,我没用过,不保证没问题。点新建文件夹,名称为.vscode; "작업 공간 폴더 추가"를 선택하지 않는 것이 가장 좋습니다. 이것은 가상 작업 공간이므로 괜찮을 것이라고 보장할 수 없습니다. .vscode라는 새 폴더를 생성하려면 클릭하세요. 리소스 관리에서 새로 생성하지 않는 이유는 Windows 탐색기에서 생성된 폴더의 첫 문자가 점으로 허용되지 않기 때문입니다(1903 이후 지원). 그런 다음 launch.json, task.json, settings.json(setting.json 아님)을 생성하여 .vscode 폴더에 넣습니다. 렌더링:

VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법
.vscode에 있어야 하며 병렬로 만들지 마세요

이 파일의 내용은 다음과 같습니다. 다음 코드를 복사하면 Zhihu는 자동으로 그 앞에 모든 권한이 있음을 알리는 몇 줄을 추가합니다. 실제로 사용할 때는 해당 코드를 삭제해야 합니다. 일부 장소는 선택적으로 수정이 가능하니 댓글에 따라 직접 확인해 보세요. 참고: C++로 작성하는 경우 task.json의 한 부분을 수정해야 합니다.

launch.json 코드

externalConsole는 원하는 대로 수정할 수 있습니다. cwd는 프로그램 실행 시 상대 경로가 될 수 있습니다. 필요한 경우 ${fileDirname}으로 변경할 수 있습니다. (감사합니다 @ xhx). 저는 lldb를 사용해 본 적이 없으므로 많은 말은 하지 않겠습니다. 색상 변경을 하지 않는 타입 및 요청사항은 정상입니다.

// https://code.visualstudio.com/docs/cpp/launch-json-reference
{
    "version": "0.2.0",
    "configurations": [{
        "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    }]
}

원래는 2018년 10월 이후에는 externalConsole을 false로 설정하면 내장 터미널을 사용할 수 있었습니다. 하지만 2019년 10월 cpptools 0.26.1에서 버그가 발생하여 아래 내장 터미널을 사용하여 중국어를 입력할 수 없게 되었습니다. Win. 0.29.0 솔브에서는 아직 사용할 수 없습니다. 수정을 위해 github.com/microsoft/MI을 열었는데 한 달이 지났는데도 검토가 없어 부정적입니다. 검토.

tasks.json 코드

C++를 작성하는 경우, 추가 경고를 원하지 않으면 -Wall을 삭제하고 필요에 따라 -std를 수정하세요. ++17에는 질문이 있는 것 같습니다. 최대 c++14를 사용하는 것이 가장 좋습니다. Linux에서는 -fexec-charset을 추가할 필요가 없습니다. 어쨌든 이것에 코멘트를 추가했지만 여전히 Baidu gcc 사용법 튜토리얼을 이해할 수 없습니다.

reveal은 컴파일 중에 터미널 패널로 이동할지 여부를 제어합니다. 자신의 기본 설정에 따라 수정할 수 있습니다. 없음으로 설정되어 있어도 자동으로 이동하지 않으며 수동으로 클릭하면 계속 정보를 볼 수 있습니다.

// https://code.visualstudio.com/docs/editor/tasks
{
    "version": "2.0.0",
    "tasks": [{
        "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
        "command": "gcc",   // 要使用的编译器,C++用g++
        "args": [
            "${file}",
            "-o",    // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
            "${fileDirname}/${fileBasenameNoExtension}.exe",
            "-g",    // 生成和调试有关的信息
            "-m64", // 不知为何有时会生成16位应用而无法运行,加上此条可强制生成64位的
            "-Wall", // 开启额外警告
            "-static-libgcc",     // 静态链接libgcc,一般都会加上
            "-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这条会导致Win下输出中文乱码;繁体系统改成BIG5
            // "-std=c11", // 要用的语言标准,根据自己的需要修改。c++可用c++14
        ], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西
        "type": "process", // process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
        "group": {
            "kind": "build",
            "isDefault": true // 不为true时ctrl shift B就要手动选择了
        },
        "presentation": {
            "echo": true,
            "reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档
            "focus": false,     // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
            "panel": "shared"   // 不同的文件的编译信息共享一个终端面板
        },
        "problemMatcher":"$gcc" // 捕捉编译时终端里的报错信息到问题面板中,修改代码后需要重新编译才会再次触发
        // 本来有Lint,再开problemMatcher就有双重报错,但MinGW的Lint效果实在太差了;用Clang可以注释掉
    }]
}

settings.json code

이 파일의 내용을 "사용자 설정"에 넣어 전역 설정을 재정의하세요. 그렇지 않으면 현재 작업공간에서만 적용됩니다. 이 두 가지 점에는 각각 고유한 장점이 있습니다.

Code Runner의 명령줄과 일부 옵션은 필요에 따라 여기에서 수정할 수 있습니다. 이를 사용자 정의하고 싶거나 그 의미를 알고 싶다면 이 확장 프로그램의 문서와 Baidu gcc 사용 튜토리얼을 참조하세요. 터미널이 cmd(Win7default)를 사용하는 경우 이를 주석 처리하거나 terminal.integrated.shell.windows를 Win10 기본값을 PS로 변경해야 하며 변경할 필요가 없습니다. terminal.integrated.shell.windows改为PowerShell;Win10默认就是PS就不用改。

感谢@Wellin Boss提到的snippetSuggestions;不过用top有时还是有点问题的,所以改成可选。

{
    "files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言
    "editor.formatOnType": true,  // 输入分号(C/C++的语句结束标识)后自动格式化当前这一行的代码
    "editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了
    "editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense
    // "editor.snippetSuggestions": "top", // (可选)snippets显示在补全列表顶端,默认是inline

    "code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,无法输入
    "code-runner.executorMap": {
        "c": "gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'",
        "cpp": "g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'"
        // "c": "gcc $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe",
        // "cpp": "g++ $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe"
    }, // 右键run code时运行的命令;未注释的仅适用于PowerShell(Win10默认)和pwsh,文件名中有空格也可以编译运行;注释掉的适用于cmd(win7默认)、PS和bash,但文件名中有空格时无法运行
    "code-runner.saveFileBeforeRun": true, // run code前保存
    "code-runner.preserveFocus": true,     // 若为false,run code后光标会聚焦到终端上。如果需要频繁输入数据可设为false
    "code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false
    "code-runner.ignoreSelection": true,   // 默认为false,效果是鼠标选中一块代码后可以单独执行,但C是编译型语言,不适合这样用
    "code-runner.fileDirectoryAsCwd": true, // 将code runner终端的工作目录切换到文件目录再运行,对依赖cwd的程序产生影响;如果为false,executorMap要加cd $dir

    "C_Cpp.clang_format_sortIncludes": true, // 格式化时调整include的顺序(按字母排序)
}

c_cpp_properties.json

如果你确定不需要使用别人的库,则现在的版本(0.18.0之后)不需要创建这个文件了,cpptools会自动使用默认的设置。所以本文也不再包含此文件的配置。

如果你自己编写了头文件又不在workspaceFolder下,或是使用别人的库,就需要手动创建这个文件放到.vscode下了。模板可以参考:Microsoft/vscode-cpptools

一些曾经的经验:

.

과거 경험:

    includePath에 라이브러리 경로를 추가하고 찾아보기해야 합니다재귀적 포함이 필요한 경우 끝에 /**를 추가하세요. 🎜🎜이 json은 실제로 주석을 허용하지 않습니다. 🎜🎜compilerPath는 gcc.exe와 정확히 일치하는 MinGW의 전체 경로여야 하는 것 같습니다. 그렇지 않으면 헤더가 표시됩니다. 파일을 찾을 수 없습니다. Linux에서는 /usr/bin/gcc이지만 오랫동안 테스트하지 않았습니다.🎜🎜Windows에서는 디렉터리 구분 기호가 원래 백슬래시 두 개를 사용해야 하는데, 여기서는 슬래시를 직접 사용하는 것도 허용됩니다🎜🎜 이 파일을 구성하는 것 외에도 추가 작업이 필요합니다. 그 일부는 아래의 "다중 파일 컴파일"을 참조하세요🎜🎜🎜보충 지식🎜🎜json은 데이터 교환 형식이며, 대부분이 JavaScript의 하위 집합입니다 완전한 하위 집합. 여기서는 🎜configuration🎜 파일로 사용됩니다. VSC 및 다양한 확장은 json의 항목을 읽어 특정 기능과 동작을 결정합니다. 🎜

    그렇게 많은 항목은 어디서 나온 걸까요? 이는 실제로 API와 유사합니다. 확장 개발자는 각 확장의 설치 페이지에 수정을 허용하는 옵션을 VSC에 "알려줍니다". 사용자로서 VSC는 입력할 때 무엇을 사용할 수 있는지 묻는 메시지를 표시하므로 실제로 작성하기가 매우 쉽습니다.

    왜 json에 그렇게 많은 것을 작성해야 하나요? VSC 자체는 C 언어나 다른 많은 언어에 특별한 대우를 제공하지 않기 때문입니다. 그리고 가장 중요한 컴파일 명령은 VSC와 관련이 없습니다. 이는 위에서 언급한 편집기와 컴파일러의 문제입니다. VSC는 C 언어를 컴파일하거나 컴파일할 수 없거나 컴파일할 수 없습니다.

    $로 시작하는 항목은 VSC 사전 정의 변수입니다. 자세한 내용은 변수 참조를 참조하세요. 예를 들어 $file은 실제 작업 중에 현재 열려 있는 파일 이름으로 대체됩니다.

    3. 코드 작성, 컴파일 및 디버그

    C 언어 소스 코드의 접미사는 .c이고, C++는 .cpp 또는 .C 또는 .cxx입니다. 이것도 가르쳐줘...) . 코드 파일은 작업공간에 저장할 수 있으며, 반드시 .vscode 폴더에 넣어둘 필요는 없습니다. 공백이 없는 것이 가장 좋습니다. 주된 이유는 많은 기호가 유효한 쉘 구문이기 때문입니다. 그렇지 않으면 Linux에서 rm을 사용하여 -rf라는 파일을 삭제해 보십시오. 확실히 확인하지 않고는 쓸 수가 없어요. Alt+Shift+F를 누르거나 마우스 오른쪽 버튼 클릭 메뉴를 사용하여 코드 서식을 지정하세요. 예를 들어 중괄호가 줄 바꿈되는지 여부는 다음과 같습니다. 같은 줄에 중괄호 서식을 지정합니다. C++ VSCode. Intellisense가 나타나면

    Tab을 눌러 코드를 완성하세요

    . 스니펫을 입력하면 여러 점프 포인트가 나타나며 다음 점프 포인트로 이동합니다. 짧은 시간(1초) 동안 입력을 중지하면 Lint가 표시됩니다. 이 확장 프로그램은 몇 가지 암시적인 경고를 표시합니다(예: 변수를 선언했지만 사용하지 않음). 불편함을 느끼면 프롬프트를 표시하지 않는 방법이 있습니다. 예를 들어 -Wall을 제거하면 프롬프트 수가 줄어듭니다. 더 많은 경고를 제거하려면 다음을 상기시켜주세요: -Wno-.... 매개변수를 찾은 후 를 사용하거나 다양한 플래그에 추가할 수 있습니다. 어쨌든 스스로 조사해 보세요. 그러나 cpptools의 Lint는 플래그 설정을 지원하지 않으므로 약간 혼란스럽습니다. 다음을 따르세요. 오류 및 경고 플래그? · Issue #2814 · microsoft/vscode-cpptools

    #pragma GCC diagnostic ignored 다음으로 실행에 대해 이야기해 보겠습니다. 첫째, 컴파일은 소스 코드에서 실행 파일을 생성하는 프로세스입니다. 디버깅은 실제로 프로그램의 작동을 제어하고 후속 수정을 용이하게 하는 특별한 종류의 작업입니다. 이는 두 가지 다른 단계로 구성됩니다. 컴파일은 통과하지만 디버깅은 실패하거나, 컴파일이 직접 실패하거나, 컴파일이 시작되기 전에 컴파일이 실패할 수 있습니다. 단순히 "작업 실패"라고 말하면 다른 사람들은 문제가 어느 단계인지 알 수 없습니다. 특정 단계를 통과했다고 판단되면 해당 단계에 대해 걱정할 필요 없이 다른 단계의 문제 해결에 집중할 수 있습니다. Ctrl+Shift+B를 눌러 간단히 컴파일하고, F5를 눌러 컴파일하고 디버그하세요. 원래 ctrl+F5는 실행은 되지만 디버깅은 의미하지 않았지만 이제 cpptools는 이를 지원하지 않으므로 계속 디버그됩니다. 팔로우:

    "디버깅 없이 실행" 지원 · 문제 #1201 · microsoft/vscode-cpptools

    프로그램 작성 초기 단계에서는 f5를 컴파일로 사용하지 말 것을강력히 권장합니다. 일부 버그는 경고만 생성하기 때문입니다. , 컴파일을 방해하지는 않지만 이러한 문제를 일찍 해결할수록 더 좋습니다. 컴파일 정보는 하단의 "터미널" 패널에 있습니다. 코드에 오류가 있으면 이를 클릭하여 컴파일러에서 보고하는 정보를 볼 수 있지만 Lint 덕분에 일반적인 오류를 즉시 발견하고 수정할 수 있습니다. 코드 작성이 훨씬 쉬워집니다.

    중단점을 추가하려면 열 번호 앞을 클릭하면 됩니다. 마우스 오른쪽 버튼을 클릭하면 조건부 중단점을 추가할 수 있습니다. 처음부터 중지하고 싶다면 메인 기능에 추가하거나 launch.json에 설정이 있습니다. 디버깅을 시작한 후 f11을 눌러 단계별로 진행합니다. 화살표로 표시된 코드 줄은 다음 중단점까지 실행됩니다. 한 줄.

    왼쪽에 변수 값을 볼 수 있는 디버깅 막대가 있습니다. 자동 막대가 없으면 수동으로 추가할 수 있습니다. 코드에서 모니터링할 표현식을 선택하고 마우스 오른쪽 버튼을 클릭하면 됩니다. Watch에 직접 추가할 수 있는 옵션이 있습니다. 복잡한 것만 직접 입력하면 됩니다. 변수에 마우스를 올려놓으면 변수의 값을 볼 수 있으나, 간단한 표현만 인식할 수 있습니다. 스택 프레임은 재귀를 관찰하는 데 유용합니다. 스택 오버플로 및 분할 오류가 발생하는 경우 "예외"를 캡처하고 자동으로 잘못된 줄로 이동할 수도 있습니다.

    특히 배열의 경우: C 언어의 배열은 함수에 의해 전달된 후 포인터로 변질됩니다. 표현식을 직접 추가하면 첫 번째 요소만 볼 수 있습니다. 이때 강제로 고정 크기 배열 포인터로 변환된 후 역참조될 수 있습니다. 예를 들어 int arr[10]는 그 뒤의 int* arr가 됩니다. 전체 배열을 볼 수 있도록 Watch에 *(int(*)[10])arr를 추가합니다. 단, 길이를 명시해야 하므로 선을 넘을 경우 주의가 필요합니다. 또는 간단한 프로그램에서는 전역 변수 배열을 사용하여 항상 이를 볼 수 있습니다. gdb에만 유효하고 무효*가 아닌 또 다른 작성 방법: *arr@10. int arr[10]传进函数里后就变成了int* arr,在Watch里添加*(int(*)[10])arr,这样就能看到完整的数组了。但长度必须是写死的,自己小心越界。或者简单的程序用全局变量数组就能一直看到了。另一种只对gdb且是非void*有效的写法:*arr@10

    快捷键:vscode: Visual Studio Code 常用快捷键 - 志文工作室。英文文档中当然有快捷键的说明,还有Cheet Sheet可以看,而且英文文档会更新。这个单独列出来仅给初学者。

    如果遇到错误,先看底下的“某些可能出现的错误”以及看评论区

    Code Runner

    如果你不需要调试,可以直接右键选run code,或者点右上角的播放按钮。如果在终端里运行,可以输入数据,但是少了显示时间的功能;在“输出”中则上面两项相反。

    在终端中按Ctrl + C可以终止程序运行,下一次运行前必须保证当前程序已经终止了(对于task也是一样的)。如果你想要复制,选中内容后直接按一下右键就可以了;粘贴则是在未选中时按右键;这个操作仅限于Win10,ctrl+c也可以复制但可能一不小心就把程序终止了。

    用它还可以在非工作区内编译运行程序,不过默认用的是gcc,除非把executorMap放到全局设置里。按照我的配置,task和Code Runner还有一点不同:working directory。前者是你打开的文件夹,后者是文件所在的文件夹。当然它们也都可以自己修改。

    其实Code Runner只是代替你手动输命令,功能并不强,算是适用场景不同吧。不要以为run code跑个Hello World很简单,Code Runner就很强、前面那么多配置都是垃圾了。

    另外,楼下的答主韩骏就是此扩展作者,有事统统找他(滑稽)。

    多文件编译

    如果你想进行少量的多文件编译,C语言直接用gcc 源文件1.c 源文件2.c 头文件1.h这样就好,C++用g++。默认生成a.exe,加-o可指定输出文件名,其余选项百度gcc使用教程。如果需要多次编译可以写一个批处理。

    如果你想进行大量的多文件编译,请学习如何写makefile或使用cmake。然后把tasks的命令改成调用make(或mingw32-make)等。

    如果你想使用别人的库,比如ffmpeg,可能需要在命令中指定-I-l(小写的L)、-L

    단축키: vscode: Visual Studio Code - Zhiwen Studio의 일반적인 바로 가기 키. 물론 영문문서에도 단축키 설명이 있고, 치트시트도 보실 수 있으며, 영문문서도 업데이트 됩니다. 이것은 초보자만을 위해 별도로 나열되어 있습니다.

    오류가 발생하면 먼저 아래의 "가능한 오류"와 댓글 영역

    을 읽어보세요.

    Code Runner

    디버그가 필요하지 않은 경우 직접 마우스 오른쪽 버튼을 클릭하여 실행 코드를 선택하거나 오른쪽 상단의 재생 버튼을 클릭하면 됩니다. 터미널에서 실행하면 데이터를 입력할 수 있지만 "출력"에 시간을 표시하는 기능이 없어 위의 두 항목이 반전됩니다.

    프로그램을 종료하려면 터미널에서 Ctrl + C를 누르세요. 다음에 실행하기 전에 현재 프로그램이 종료되었는지 확인해야 합니다(작업의 경우에도 마찬가지). 복사하려면 내용을 선택한 후 마우스 오른쪽 버튼을 클릭하고, 선택하지 않은 경우 마우스 오른쪽 버튼을 클릭하면 됩니다. 이 작업은 Win10으로 제한되며 Ctrl+C도 복사할 수 있지만 프로그램이 실수로 종료될 수 있습니다.

    작업 공간이 아닌 곳에서 프로그램을 컴파일하고 실행하는 데에도 사용할 수 있지만, executorMap을 전역 설정에 두지 않으면 기본적으로 gcc가 사용됩니다. 내 구성에 따르면 작업과 Code Runner 사이에는 작업 디렉터리라는 한 가지 차이점이 있습니다. 전자는 열어본 폴더이고 후자는 파일이 있는 폴더입니다. 물론 스스로 수정할 수도 있습니다.

    VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

    사실 Code Runner는 수동으로 입력하는 명령만 대체할 뿐이며, 그 기능은 그다지 강력하지 않습니다. 다양한 시나리오에 적용할 수 있습니다. Hello World를 실행하기 위해 코드를 실행하는 것이 쉽다고 생각하지 마십시오. Code Runner는 매우 강력하며 이전 구성은 모두 쓰레기입니다.
    다중 파일 컴파일

    소량의 다중 파일 컴파일을 수행하려면 C 언어에서 직접 gcc 소스 파일 1.c 소스 파일 2.c 헤더 파일 1.h를 사용합니다. 괜찮습니다. C++ g++를 사용하세요. A.exe는 기본적으로 생성되며 -o를 추가하여 출력 파일 이름을 지정하고 나머지 옵션은 Baidu gcc 사용법 튜토리얼입니다. 여러 번 컴파일해야 하는 경우 일괄 프로세스를 작성할 수 있습니다.

    다중 파일 컴파일을 많이 하고 싶다면 makefile 작성 방법이나 cmake 사용법을 배워보세요. 그런 다음 작업 명령을 변경하여 make(또는 mingw32-make) 등을 호출합니다.

    🎜ffmpeg와 같은 다른 사람의 라이브러리를 사용하려면 -I, -l(소문자 L), -L 명령에서. 특정 매개변수에 대해서는 해당 라이브러리의 문서를 읽어보세요. Intellisense를 구성하려면 c_cpp_properties.json에 경로를 추가해야 할 수도 있습니다. 🎜🎜이러한 경우에는 별도의 작업 공간을 구축하고 단일 파일 컴파일과 공유하지 않는 것을 고려할 수 있습니다. 실제로 새 프로젝트를 만들지 않고 단일 파일만 디버깅하는 것은 향후 대규모 IDE 사용 및 이해에 도움이 되지 않습니다. 그러나 초보자는 프로젝트를 구축하는 것이 번거롭다고 생각하지 마십시오. 🎜🎜간단히 말하면, 이는 VSC와 관련이 없습니다. 다른 IDE를 사용하거나 수동 컴파일을 할 때에도 비슷한 문제가 발생하며 이 역시 약간 복잡합니다. 이 기사에서는 이에 대해 자세히 논의하지 않으며 직접 해결해 보겠습니다. 🎜🎜폴더 저장🎜🎜 🎜코드 작성 후 이전에 생성한 폴더🎜를 열어서 작성해야 합니다. 그렇지 않으면 Intellisense가 모두 사라지고 Code Runner만 사용할 수 있습니다. (주로 4개의 json이 필요합니다. 다른 폴더를 생성하려면 해당 json을 복사하여 사용해야 합니다.) 🎜🎜바로가기를 생성하고(마우스 오른쪽 버튼을 클릭하여 생성) 작업공간 경로를 VSC 메인 프로그램에 매개변수로 전달할 수 있습니다 . 큰따옴표를 입력하는 것을 잊지 마세요. 아이콘을 추가할 수도 있습니다. 1.18에는 실제 가상 작업공간이 있고, 하나의 창에 함께 있지 않은 여러 폴더가 포함될 수 있습니다. "파일" 메뉴에도 "작업공간 저장" 기능이 있지만 시도해본 적이 없어서 될지 장담할 수 없습니다. 좋아요. 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜임시 파일 정리 🎜🎜이 구성에 따르면 확실히 오랜 시간 동안 코드를 컴파일한 후 많은 exe 파일이 있을 것이며 여러 폴더에 흩어져 있을 수 있습니다. 🎜<p>可以考虑修改一下json文件,把生成文件的目录指定到一个专门放exe的文件夹里;如果不会,百度gcc使用教程以及看我的json里的注释。或者资源管理器右上角搜索*.exe然后手动删除。</p> <p>也可也写个bat,放到工作区里,要用的时候右键Run Code:</p><pre class="brush:js;toolbar:false">del %~dp0*.exe /q /s del %~dp0tempCodeRunnerFile.c /q /s del %~dp0a.out /q /s del %~dp0*.o /q /s</pre><p>其中<code>%~dp0会被替换成该批处理所在目录,这是为了防止有同学选错工作目录,误删根目录下的文件;code runner的设置我也调整成了先切换到文件目录,双保险。

    添加纯英文输入法

    Windows 10,默认输入法只有一个微软拼音,按一次shift就能进行中英转换;为了保持兼容,按ctrl加空格也能进行中英转换,但这个快捷键正是强制触发Intellisense的快捷键。

    所以,我强烈建议手动添加“英语”语言输入法,正常代码时切换到纯英文输入法(win+空格),在需要频繁中文注释或者在字符串里写中文时才用中文输入法的英文模式。

    这样也可以解决某些游戏需要用到shift键但同样快捷键冲突的问题。具体操作可以自己百度,也可以看我写的这篇有点复杂的文章:Windows 切换显示语言与添加纯英文输入法

    某些可能出现的错误

    为了阅读的连贯性,这一部分移到了“A. 一些其它可能出现的错误”。遇到问题优先查看那里是否已经提了。

    4. 其他设置

    我的一些其他的设置,用在全局settings.json里,根据自己的情况调整,不需要全部照着我的写。写完一个以后要打逗号;最外面的那个大括号我没加,就别弄丢了

    现在的VSC用的是可视化的设置界面,其实原本是手动编辑且出现两列设置的。点击右上角那个花括号就能手动编辑。

    作者:谭九鼎
    链接:https://www.zhihu.com/question/30315894/answer/154979413
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    "editor.fontFamily": "等距更纱黑体 SC", // 控制编辑器字体
    "editor.fontSize": 16, // 同上
    "editor.fontLigatures": true, // 连体字,效果不太好形容,见 https://typeof.net/Iosevka 最后一部分
    "editor.minimap.enabled": false, // 我个人不用minimap,就是右边那个东西
    "editor.dragAndDrop": false, // 选中文字后,可以拖动它们调整位置。我是不需要
    "editor.cursorSmoothCaretAnimation": true, // 移动光标时变得平滑
    "editor.smoothScrolling": true, // 滚动平滑,不过效果很微弱
     
    "files.trimTrailingWhitespace": true, // 保存时,删除每一行末尾的空格
    "files.insertFinalNewline": true, // 保存后文件最末尾加一整行空行,Linux下的习惯
    "files.autoGuessEncoding": false, // 启用后,会在打开文件时尝试猜测字符集编码。我关闭的理由见6,默认也是禁用的
    
    "workbench.colorTheme": "One Dark Pro", // 主题
    "workbench.colorCustomizations": {
          "activityBar.foreground": "#39C5BB" // 自定义颜色;想定义其它位置参见官方文档
    },
    "workbench.settings.useSplitJSON": true, // 恢复手动编辑时的两列设置
    "window.zoomLevel": 0.2, // 整体放大
    
    "git.enabled": false, // 如果你不用git,可以考虑关闭它
    "git.ignoreMissingGitWarning": true, // 同上
    
    "[c]": {
        // "files.encoding": "gbk" // 这样的格式可以对指定后缀的文件应用设置,如果你实在想用gbk,就这样设置吧。cpp同理。
    },

    更纱黑体是楼下B神做的字体,特点是标点好看(误):be5invis/Sarasa-Gothic

    Consolas虽然是Windows自带字体中还算行的,但它只有英文字体;微软雅黑虽然是非衬线字体,但它不是等距的,这一点非常不适合编程,等线也不等距;中易宋体……告辞。不下新的字体,其他两大系统我不清楚,Windows下简直没有编程可用的字体。Consolas加雅黑嘛,也还行吧,不过能用更好的干嘛不用呢。

    6. 关于中文和乱码

    VS Code输出中文会出现乱码,很多人都遇到过。这是因为源代码默认是UTF-8编码,cmd/PowerShell是GBK编码。直接编译,会把“你好”输出成“浣犲ソ”。Linux就没有这个问题。

    一种解决方法是用gcc,编译时用-fexec-charset=GBK这个参数(目前的配置是有的),生成的程序就是GBK编码的,源文件仍是UTF8而clang的execution-charset supports only UTF-8,所以用clang就无解。

    另一种方法是用宽字符输出,有点复杂,见:C语言与中文的一些测试 (Win, UTF8源码) 。此文也提到了chcp 65001的事。

    直接修改非Unicode程序的语言为UTF8(beta)会导致所有用GBK的程序乱码,这是不可接受的。

    当然,如果你不打算坚持用UTF8作为源代码的编码,那直接用GBK编码也行。

    如果是打开已有的以GBK编码的文件,VS Code默认会以UTF-8编码打开(除非你设置了猜测编码),这样编辑器内的中文就会乱码,此时要点右下角的GBK,选“通过编码重新打开”,选UTF-8即可。那为什么不打开自动猜测编码呢?可以参见我的这个回答:VS Code 中文注释显示乱码怎么办?。如果你不担心,那就开吧。

    如果把代码文件发给其他用Windows的人,最好转成GBK,否则别人用记事本打开有可能会乱码(1803后的记事本改善了一些,联通已经不会乱码了)。

    对于调试,无论怎么做,gdb都无法调试路径中存在中文的程序。这个貌似是gdb的bug,但是优先级极低:[gdb] cannot not open source file with Chinese/Unicode characters in path when debugging · Issue #602 · microsoft/vscode-cpptools

    总之,对于Windows,这些问题没什么好办法,因为本文用的这一套就是从Linux搬过来的。用Linux应该就没有这些问题了。

    7. 헤더 파일을 찾을 수 없습니다. 오류

    VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

    gcc가 경로에 없습니다. 돌아가서 위의 확인 단계를 살펴보세요
    • C_cpp_properties.json이 수동으로 구성되었으며 포함된 경로가 잘못되었습니다. 이 파일을 만들지 않았더라도 걱정하지 마세요
    • 다시 시작하고 다시 시도하세요
    • 이 포인트가 요구 사항을 충족하는지 확인하면 더 이상 할 일이 없습니다...또는 그냥 변경하면 됩니다. 다른 응답자의 튜토리얼을 참조하세요. 이 문장이 최종적인 대체문이라는 점을 참고하시기 바랍니다. 실수가 아니라고 확신한다면 제가 해결할 수 없다는 점을 저에게 물어볼 필요가 없습니다.

    헤더 파일을 찾을 수 없는 또 다른 오류:

    VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법

    이 상황은 clang의 기본 대상이 msvc이기 때문에 --target=x86_64-w64-mingw이 매개변수가 작동합니다.

    이 기본 타겟은 소스코드에 하드코딩되어 있어서 여기저기 찾아보았지만 수정할 수 있는 일반적인 방법을 찾을 수 없었습니다. clang의 소스 코드를 다운로드하고 직접 변경한 다음 clang 자체를 컴파일하면 해결할 수 있습니다. 또는 mingw를 사용하지 않고 Windows SDK를 설치하면 기본 대상을 준수합니다. --target=x86_64-w64-mingw这个参数才行。

    这个默认target是写死在源代码里的,我找了一圈没找到正常修改办法。下载clang的源代码,自己改掉,再编译clang本身,也许可以解决。或者装Windows SDK而不使用mingw,这样就符合默认target了。

    当然这个时候最简单的办法就是用gcc编译。

    12. 在Win下使用clang

    其实这部分本来是本文的主打部分的,但是确实会引入太多概念,而且效果也不是那么好(因为没有libc++),现在全都放在这里变成可选内容。理论上在WSL里用更好,又但也许这样会从一个坑跳到另一个坑,我没试过。本部分仅留作踩坑经验。

    • Q:为什么要装Clang?
      A:错误提示更友好。以及:Clang 比 GCC 好在哪里?
    • Q:Clang怎么读?
      A:正确答案是/?kl??/,即c发"可"的音;不过实际还是以双方都理解为基础,比如平常把SQL说成circle也是能理解的。
    • Q:为什么既要装Clang又要装MinGW?
      A:因为Win下的Clang没有libc++。你也可以选择装VS用Windows SDK,就不需要MinGW了,这个更官方一些,但体积较大。
    • Q:MSVC integration install failed / unable to find a Visual Studio installation...
      A:就是上一条的原因,Clang默认用的是MSVC的后端。但本部分用的是MinGW,所以就不用管这个提示。要不就装Windows SDK

    环境

    • LLVM Download Page:在此页面下载Clang。选 Pre-Built Binaries 中的 Windows (64-bit),不需要下.sig文件
    • vscode-clangd:提供Intellisense和Lint功能;仓库及用法见:clangd/clangd
    • C/C++ Clang Command Adapter:本文曾用过,vscode-clangd出现问题时可以考虑换成这个试试;配置有一些不同,需要改clang.cflags;如果没出问题就别装了
    • Clang-Format:只有想自定义代码风格时才装,比如大括号是否换行。需要另外学习如何使用
    • CodeLLDB:lldb的vscode扩展,需要Python环境;我没用过

    配置

    • 编译命令加一句--target=x86_64-w64-mingw。clang的默认target为msvc,不加就会找不到头文件
    • C_Cpp.errorSquigglesC_Cpp.autocompleteC_Cpp.suggestSnippets
    • 물론 이때 가장 쉬운 방법은 gcc로 컴파일하는 것입니다.

    12. Win에서 clang 사용사실 이 부분이 원래 이 글의 주요 부분이었는데 너무 많은 개념을 소개하고 효과도 별로 좋지 않아서(libc++가 없기 때문에) 지금은 그렇습니다. 여기에서 모두 사용할 수 있습니다. 이론적으로는 WSL에서 사용하는 것이 더 좋지만 아마도 한 구덩이에서 다른 구덩이로 이동할 수도 있습니다. 이 부분은 함정 경험에만 해당됩니다.

    Q: 왜 Clang을 설치해야 하나요?
    A: 오류 프롬프트가 더 친숙해졌습니다. 그리고: Clang이 GCC보다 나은 점은 무엇인가요?

    🎜Q: Clang을 어떻게 발음하나요?
    A: 정답은 /?kl??/입니다. 즉, c는 "ke"라고 발음합니다. 그러나 이는 여전히 양측의 이해를 바탕으로 한 것입니다. 예를 들어 SQL을 다음과 같이 말하는 것도 이해할 수 있습니다. 원. 🎜🎜Q: Clang과 MinGW를 모두 설치해야 하는 이유는 무엇인가요?
    A: Win의 Clang에는 libc++가 없기 때문입니다. MinGW가 필요하지 않은 VS를 설치하고 Windows SDK를 사용하도록 선택할 수도 있습니다. 이는 더 공식적이지만 규모가 더 큽니다. 🎜🎜Q: MSVC 통합 설치 실패/Visual Studio 설치를 찾을 수 없습니다...
    A: 이전 항목에서 Clang이 기본적으로 MSVC 백엔드를 사용하는 이유입니다. 하지만 이 부분은 MinGW를 사용하므로 이 프롬프트에 주의할 필요는 없습니다. 그렇지 않은 경우에는 Windows SDK🎜🎜🎜🎜environment🎜🎜🎜🎜
    LLVM 다운로드 페이지🎜: 이 페이지에서 Clang을 다운로드하세요. 사전 빌드된 바이너리에서 Windows(64비트)를 선택하면 .sig 파일을 다운로드할 필요가 없습니다🎜🎜vscode-clangd: 웨어하우스 및 사용을 위한 Intellisense 및 Lint 기능을 제공합니다. clangd/clangd🎜🎜🎜C/ C++ Clang Command Adapter: 이 기사는 이전에 사용한 적이 있습니다. vscode-clangd에 문제가 있으면 구성이 약간 다르므로 clang.cflags를 변경해야 합니다. 문제가 있으면 설치하지 마세요. Clang-Format: 코드 스타일을 사용자 정의하려는 경우에만 중괄호를 감싸는지 여부와 같이 설치에 따라 다릅니다. 🎜🎜CodeLLDB 사용 방법을 배워야 합니다. Python 환경이 필요한 lldb의 vscode 확장입니다. 저는 사용해 본 적이 없습니다. 🎜🎜🎜🎜Configuration🎜🎜🎜🎜--target=x86_64-w64 문장 추가 -mingw를 컴파일 명령으로 >. clang의 기본 대상은 msvc입니다. 추가하지 않으면 헤더 파일🎜🎜C_Cpp.errorSquiggles, C_Cpp.autocomplete, 을 찾을 수 없습니다. C_Cpp.suggestSnippets는 모두 끄십시오. 그렇지 않으면 clangd에 의해 보고된 대로 반복됩니다 🎜🎜🎜🎜🎜compile_flags.txt🎜🎜🎜🎜실제로 이러한 컴파일 옵션을 설정하는 것입니다. 기본적으로 -Wall을 사용하고 --target=x86_64-w64-mingw. clangd는 평가 중인 파일에 가장 가까운 compile_flags.txt만 사용합니다. --target이 있는지 확인해야 하므로 대체를 위해 작업 공간 디스크에 루트 디렉터리를 만드는 것이 가장 좋습니다. 🎜

    하지만 더 혼란스러운 점은 C와 C++ 모두 헤더 파일로 .h를 사용한다는 것입니다. std를 추가하지 않으면 .c와 .cpp는 올바르게 린트될 수 있지만 .h는 C 모드를 사용합니다. 폴백에 대한 좋은 해결책은 없는 것 같습니다. 이번에도 Windows SDK를 설치하세요.

    13. 내 코드 작성 경험

    온톨로지+컴파일러+확장으로 보면 C만 쓴다면 하드디스크 사용량은 그리 적지 않은 1G이다. 메모리 사용량은 아직은 0.5g 정도로 비교적 적습니다. 메모리를 많이 사용하는 버그도 있었지만, 물론 오래 전에 고쳐졌습니다.

    아마도 VSC의 첫 번째 장점은 보기 좋다는 걸까요? C/C++용으로 특별히 설계되지는 않았지만 현재로서는 가장 현대적인 일반 텍스트 편집기여야 합니다. 그리고 Lint만으로도 wintc, cfree 및 dev c++보다 훨씬 낫습니다. dev c++ 자체 디버그 기능에 버그가 있다는 점은 말할 것도 없습니다.

    기타 IDE, CodeBlocks는 여전히 살아있지만 역사적인 수하물은 매우 분명합니다. Clion은 아름다운 인터페이스와 강력한 기능을 갖추고 있지만 영어로만 제공되므로 학생들이 무료로 키를 신청할 수 있으며, 그렇지 않으면 비용이 발생합니다. Windows SDK를 사용하려면 다음 Visual Studio(Installer), Community 버전은 C++ 데스크톱 개발을 연결하는 것뿐입니다. 이는 Clang의 기본 Target을 따르지만 VS를 직접 사용하는 것이 더 좋다고 생각합니다. 일부 C IDE에 대한 다른 응답자의 평가에 대해 다음 답변을 읽을 수 있습니다. 프로그래밍 기초가 없는 초보자가 C 언어를 배우려고 하는데 VC6 또는 VS2015를 사용해야 합니까? .

    학생회에게 한 가지 더 말씀드리고 싶은 점은 이 글을 혼자서 바이두로 할 수 있고, 이해하기 위해 열심히 노력하고, 직접 구성하는 것이 티에바에 연락하고 찾아주시는 수많은 분들보다 이미 훨씬 낫다는 것입니다. 선생님이 QQ 그룹에 IDE를 게시하기를 기다리는 사람들. 능력이 되신다면 VSC 문서인 Documentation for Visual Studio Code를 읽어보시길 권합니다. 영어의 실제 적용을 경험해 보는 것도 좋습니다.

    A. 기타 발생할 수 있는 오류

    • 중단점을 추가하지 않고 hello world만 작성하는 경우 f5를 누른 후 블랙박스가 과거/플래시백되는 것은 정상입니다. 프로그램을 일시 중지하려면 끝에 getchar();를 한두 개 추가하면 됩니다. 가끔 두 개가 사용되는 이유를 모르겠습니다. C 언어 교사에게 문의하거나, system("pause")를 사용하거나, 중단점을 추가하거나, launch.json에 내장된 터미널(externalConsole false)을 사용하세요. 외부 터미널 사용을 고집하고 아무것도 하지 않고 실행 후 일시 중지하고 싶다면 VSC는 할 수 없습니다. 적어도 내 구성으로는 할 수 없으며 공부하고 싶지 않습니다. 내장 터미널을 사용하기 때문입니다.
    • getchar();,不明白为什么有时要用两个?去问你们C语言老师;或用system("pause"),或加断点,或者launch.json里用内置终端(externalConsole false)。如果你硬要用外置终端且要什么都不做,就想运行后暂停在那里,那么VSC办不到,至少我的配置办不到,我也不想研究,因为我用内置终端。
    • preLaunchTask“Compile”已终止,退出代码为 1:编译有error并且你用的是F5运行的就会有这个提示;如果你点仍然调试,就会调试上一次编译成功的文件。其实所有的编译失败都会触发这个错误,出错的返回值是1难道不是常识?所以仅仅告诉我出现了这个提示根本没用,它的意思就是出错了,没有人能看出原因,原因在“终端”面板里。如果Hello World能正常调试运行,但某个其它代码出现这个错误,很可能是你自己代码本身有错误
    • 终端将被任务重用,按任意键关闭:听过“按任意键继续”吗?这句话就是这个意思。这句话比上面那个退出代码为1还要没用,它根本就不包含任何有效信息,无论成功还是出错都会显示它,它就是一个说明性的文字。
    • 无法打开...,找不到文件(file:///build/glibc-OTsEL5/glibc-2.27/...):我在Linux下遇到了这个问题,看起来应该是你试图step in一个库函数,但是没有源代码。解决办法是下一个glibc放到指定位置。或者参见这个:Disable "Unable to open file" during debug · Issue #811 · Microsoft/vscode-cpptools
    • undefined reference to xxx ... linker command failed:调用了未声明的函数。可能是函数名打错了,或者没有include头文件。总之是你自己的代码有错误。
    • ld: cannot open output file ... permission denied:原程序仍在运行(比如死循环),无法被覆盖所以生成失败。任务管理器结束那个进程即可。
    • MinGW下,监视(Watch)窗口里用strcmp,会导致gdb崩溃退出,原因不明。linux下正常。
    • 重命名文件后,原来已有的Lint还会在问题栏里;修改了文件后断点可能会失效。以及还存在一些其他的像这样的小bug,一般关掉VSC再开就行。
    • 此配置无法使用Bash for Windows或WSL,因为bash中的反斜杠会被识别为换行。cpptools现为launch.json提供了一个Bash on Windows Launch的snippets。现在又出了一个Remote WSL。但这些我都没有试过如何使用。
    • 如果你要进行调试,不要开优化。gcc用-Og还可以保留一些调试信息,但clang用了以后就不能用gdb调试了。即使如此我还是在某一次写代码的时候遇到了无法跳入函数的问题,而VS可以跳入。
    • vscode-clangd第一次无法正确检测到printf和scanf还有realloc,但是代码中用过一次以后就好了。我也不知道为什么。
    • 此时不应有 &:终端改为用PowerShell或者code runner的executorMap用我注释掉的那两条命令。具体看上面settings.json的说明。
    • crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain':没有main函数,或者把main写成了mian。
    • 在Win下用clang+mingw,#include 会报'float.h' file not found,改成g++后就好了。我觉得这应该是库的bug,反正我是不知道怎么解决。或者别用C++17试试

    B. 如何添加环境变量

    图形化的方式:右键“此电脑”,选属性;或者按win+PauseBreak。选左边的高级系统设置,高级,环境变量。选上面那几个条目中的Path,编辑,新建。然后把含有目标exe的文件夹路径填进去。例如gcc在C:mingwbingcc,就填C:mingwbin,Win大小写不敏感。

    命令行的方式:打开cmd或者PS,setx /m path "%path%;C:mingwbin"preLaunchTask "Compile"이 종료되었습니다. 종료 코드는 1입니다. 컴파일에 오류가 있으며 F5 키를 눌러 실행 중입니다. Still debug를 클릭하면 성공적으로 컴파일된 파일이 표시됩니다. 마지막으로 디버깅됩니다. 실제로 모든 컴파일 실패는 이 오류를 유발합니다. 오류 반환 값이 1인 것이 상식이 아닙니까? 따라서 이 프롬프트가 나타난다고 말하는 것은 전혀 소용이 없습니다

    , 이는 문제가 발생하여 아무도 그 이유를 알 수 없음을 의미합니다.

    이유는 "터미널" 패널에 있습니다. Hello World를 디버깅하고 정상적으로 실행할 수 있는데 다른 코드에서 이 오류가 발생한다면, 자신의 코드에 오류가 있을 가능성이 높습니다. 작업에서 터미널을 재사용합니다. 닫으려면 아무 키나 누르세요. "계속하려면 아무 키나 누르세요"라는 말을 들어보신 적이 있나요? 이것이 바로 이 문장이 의미하는 바입니다. 이 문장은 위의 종료 코드 1보다 훨씬 더 쓸모가 없습니다. 이는 유효한 정보를 전혀 포함하지 않으며 단지 설명 텍스트일 뿐입니다.

    열 수 없음..., 파일을 찾을 수 없음(file:///build/glibc-OTsEL5/glibc-2.27/...): Linux에서 이 문제가 발생했습니다. 라이브러리 함수의 단계는 있지만 소스 코드는 없습니다. 해결책은 다음 glibc를 지정된 위치에 배치하는 것입니다. 또는 다음을 참조하세요: 디버깅 중에 "파일을 열 수 없음"을 비활성화합니다. · 문제 #811 · Microsoft/vscode-cpptools. 🎜xxx에 대한 정의되지 않은 참조 ... 링커 명령 실패: 선언되지 않은 함수가 호출되었습니다. 함수 이름을 잘못 입력했거나 포함 헤더 파일이 없을 수 있습니다. 즉, 자신의 코드에 오류가 있습니다. 🎜ld: 출력 파일을 열 수 없습니다 ... 권한 거부됨: 원래 프로그램이 여전히 실행 중이고(예: 무한 루프) 덮어쓸 수 없으므로 생성이 실패합니다. 작업 관리자에서 해당 프로세스를 종료하면 됩니다. 🎜MinGW의 Watch 창에서 strcmp를 사용하면 알 수 없는 이유로 gdb가 충돌하고 종료됩니다. 리눅스에서는 정상입니다. 🎜파일 이름을 바꾼 후에도 기존 Lint는 여전히 문제 열에 남아 있으며, 파일을 수정한 후에 중단점이 유효하지 않게 될 수 있습니다. 이와 같은 다른 작은 버그도 있습니다. 일반적으로 VSC를 닫았다가 다시 엽니다. 🎜Bash의 백슬래시는 줄 바꿈으로 인식되므로 이 구성은 Windows용 Bash 또는 WSL과 함께 사용할 수 없습니다. cpptools는 이제 launch.json에 대한 Windows 실행 시 Bash 스니펫을 제공합니다. 이제 또 다른 원격 WSL이 있습니다. 하지만 나는 이것들 중 어느 것도 사용해 본 적이 없습니다. 🎜디버깅을 하고 싶다면 최적화를 켜지 마세요. Gcc는 -Og를 사용하여 일부 디버깅 정보를 계속 유지할 수 있지만 clang을 사용한 후에는 gdb를 디버깅에 사용할 수 없습니다. 그럼에도 불구하고 코드를 작성할 때 함수로 점프할 수 없는 문제에 직면했는데 VS가 함수로 점프할 수 있었습니다. 🎜vscode-clangd는 처음에는 printf, scanf 및 realloc를 올바르게 감지하지 못했으나 코드에서 한 번 사용한 후에는 더 좋아졌습니다. 나도 왜 그런지 모르겠다. 🎜지금은 &가 없어야 합니다. 제가 주석 처리한 두 명령을 사용하려면 PowerShell 또는 코드 실행기의 executorMap을 사용하도록 터미널을 변경해야 합니다. 자세한 내용은 위의 settings.json 설명을 참조하세요. 🎜crt0_c.c:(.text.startup+0x2e): `WinMain'에 대한 정의되지 않은 참조: 메인 함수가 없거나 메인이 메인으로 작성되었습니다. 🎜Win에서 clang+mingw를 사용할 때 #include 는 'float.h' 파일을 찾을 수 없다고 보고합니다. g++로 변경하면 문제가 없습니다. 이건 라이브러리의 버그인 것 같은데 어떻게 해결해야 할지 모르겠습니다. 아니면 C++17을 사용하지 마세요.

🎜B. 환경 변수를 추가하는 방법🎜🎜그래픽적으로: "이 PC"를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하거나 win+PauseBreak를 누르세요. 왼쪽에서 고급 시스템 설정, 고급, 환경 변수를 선택합니다. 위 항목 중 Path를 선택하고 수정 후 새로 생성합니다. 그런 다음 대상 exe가 포함된 폴더의 경로를 입력합니다. 예를 들어 gcc가 C:mingwbingcc에 있으면 C:mingwbin을 입력하세요. Win은 대소문자를 구분하지 않습니다. 🎜🎜명령줄 방법: cmd 또는 PS를 열고 setx /m path "%path%;C:mingwbin". 이 명령은 관리자 권한이 필요하지 않으며 터미널이 종료될 때 종료되지 않습니다(위와 동일한 그래픽 효과가 있음). 🎜🎜아직 수정방법을 모르신다면 바이두나 빌리빌리에서 "환경변수"를 검색해서 영상을 보시면 됩니다. 대부분 C는 아니지만 차이가 크지 않으니🎜실수로 삭제하지 않도록🎜 주의하세요. 🎜

궁금한 점이 있으시면 메시지를 남겨주시면 논의할 수 있지만, 자세히 설명하는 것이 가장 좋습니다. 그리고 다시 말씀드리지만, "preLaunchTask가 코드 1로 종료되었습니다"라는 문장만 말하지 마세요. 이 문장은 쓸모가 없습니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !

위 내용은 VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 zhihu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제