관련 권장 사항: "vscode 기본 튜토리얼"
이 문서는 초보자를 위한 것이며 모든 단계가 자세히 설명되어 있습니다. 명령줄, 프로그램 컴파일 및 디버깅, VS Code 사용에 대한 지식을 알아보려면 이 문서를 읽어보세요. 이 기사가 번거롭다면 간단한 버전을 제공하겠습니다. gcc 및 c/c++ 확장을 설치하고, 폴더를 열고, 오픈 소스 코드 F1을 클릭하고, 활성 파일을 빌드 및 디버그하면 완료됩니다.
이 문서의 많은 내용은 공식 VS Code 문서(Visual Studio Code를 사용한 C++ 프로그래밍 및 각 확장에 대한 문서)에서 얻을 수 있으며 해당 내용도 업데이트될 예정입니다(이 문서도 몇 가지 주요 업데이트를 거쳤습니다). 업데이트하고 싶으신가요? 자세한 내용을 보려면 가서 확인하세요. 본 글은 기본적으로 여러번 시도한 결과입니다. 오류가 있으면 지적해 주시기 바랍니다.
최종 효과: 컴파일 단계 중 오류, 코드 조각, 완성, 서식 지정, 단일 파일 컴파일 및 디버깅을 실시간으로 표시합니다.
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
即可。
按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
끝입니다.
gcc -v
를 입력하세요. 표시된 버전이 방금 다운로드한 버전과 다르거나 이전 버전인 경우 Path에 이전 버전의 컴파일러가 있다는 의미이며, 이는 다른 IDE를 설치하여 설치되었을 수 있습니다. Path에서 원래 gcc 경로를 제거해야 합니다. 🎜🎜이 두 가지 확인 🎜은 🎜을 준수해야 하며, 그렇지 않으면 환경 변수를 수정해야 합니다. 실수로🎜삭제🎜하지 않도록 주의하세요. 🎜기타 선택적 확장:
아닙니다. 권장/ 설치할 필요가 없는 확장 프로그램:
보충 지식
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 폴더에 넣습니다. 렌더링:
이 파일의 내용은 다음과 같습니다. 다음 코드를 복사하면 Zhihu는 자동으로 그 앞에 모든 권한이 있음을 알리는 몇 줄을 추가합니다. 실제로 사용할 때는 해당 코드를 삭제해야 합니다. 일부 장소는 선택적으로 수정이 가능하니 댓글에 따라 직접 확인해 보세요. 참고: C++로 작성하는 경우 task.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 솔브에서는 아직 사용할 수 없습니다. 수정을 위해 https://github.com/microsoft/MIEngine/pull/1025을 열었는데 한 달이 지났는데도 검토가 없어 부정적입니다. 검토.
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可以注释掉 }] }
이 파일의 내용을 "사용자 설정"에 넣어 전역 설정을 재정의하세요. 그렇지 않으면 현재 작업공간에서만 적용됩니다. 이 두 가지 점에는 각각 고유한 장점이 있습니다.
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的顺序(按字母排序) }
如果你确定不需要使用别人的库,则现在的版本(0.18.0之后)不需要创建这个文件了,cpptools会自动使用默认的设置。所以本文也不再包含此文件的配置。
如果你自己编写了头文件又不在workspaceFolder下,或是使用别人的库,就需要手动创建这个文件放到.vscode
下了。模板可以参考:Microsoft/vscode-cpptools。
一些曾经的经验:
/**
del %~dp0*.exe /q /s del %~dp0tempCodeRunnerFile.c /q /s del %~dp0a.out /q /s del %~dp0*.o /q /s
.vscode
아래에 넣어야 합니다. 템플릿은 /**
를 추가하세요. 🎜🎜이 json은 실제로 주석을 허용하지 않습니다. 🎜🎜compilerPath는 gcc.exe와 정확히 일치하는 MinGW의 전체 경로여야 하는 것 같습니다. 그렇지 않으면 헤더가 표시됩니다. 파일을 찾을 수 없습니다. Linux에서는 /usr/bin/gcc이지만 오랫동안 테스트하지 않았습니다.🎜🎜Windows에서는 디렉터리 구분 기호가 원래 백슬래시 두 개를 사용해야 하는데, 여기서는 슬래시를 직접 사용하는 것도 허용됩니다🎜🎜 이 파일을 구성하는 것 외에도 추가 작업이 필요합니다. 그 일부는 아래의 "다중 파일 컴파일"을 참조하세요🎜🎜🎜보충 지식🎜🎜json은 데이터 교환 형식이며, 그렇게 많은 항목은 어디서 나온 걸까요? 이는 실제로 API와 유사합니다. 확장 개발자는 각 확장의 설치 페이지에 수정을 허용하는 옵션을 VSC에 "알려줍니다". 사용자로서 VSC는 입력할 때 무엇을 사용할 수 있는지 묻는 메시지를 표시하므로 실제로 작성하기가 매우 쉽습니다.
왜 json에 그렇게 많은 것을 작성해야 하나요? VSC 자체는 C 언어나 다른 많은 언어에 특별한 대우를 제공하지 않기 때문입니다. 그리고 가장 중요한 컴파일 명령은 VSC와 관련이 없습니다. 이는 위에서 언급한 편집기와 컴파일러의 문제입니다. VSC는 C 언어를 컴파일하거나 컴파일할 수 없거나 컴파일할 수 없습니다.
$로 시작하는 항목은 VSC 사전 정의 변수입니다. 자세한 내용은 변수 참조를 참조하세요. 예를 들어 $file은 실제 작업 중에 현재 열려 있는 파일 이름으로 대체됩니다.
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는 이를 지원하지 않으므로 계속 디버그됩니다. 팔로우:
프로그램 작성 초기 단계에서는 f5를 컴파일로 사용하지 말 것을강력히 권장합니다. 일부 버그는 경고만 생성하기 때문입니다. , 컴파일을 방해하지는 않지만 이러한 문제를 일찍 해결할수록 더 좋습니다. 컴파일 정보는 하단의 "터미널" 패널에 있습니다. 코드에 오류가 있으면 이를 클릭하여 컴파일러에서 보고하는 정보를 볼 수 있지만 Lint 덕분에 일반적인 오류를 즉시 발견하고 수정할 수 있습니다. 코드 작성이 훨씬 쉬워집니다.
중단점을 추가하려면 열 번호 앞을 클릭하면 됩니다. 마우스 오른쪽 버튼을 클릭하면 조건부 중단점을 추가할 수 있습니다. 처음부터 중지하고 싶다면 메인 기능에 추가하거나 launch.json에 설정이 있습니다. 디버깅을 시작한 후 f11을 눌러 단계별로 진행합니다. 화살표로 표시된 코드 줄은 다음 중단점까지 실행됩니다. 한 줄.
왼쪽에 변수 값을 볼 수 있는 디버깅 막대가 있습니다. 자동 막대가 없으면 수동으로 추가할 수 있습니다. 코드에서 모니터링할 표현식을 선택하고 마우스 오른쪽 버튼을 클릭하면 됩니다. Watch에 직접 추가할 수 있는 옵션이 있습니다. 복잡한 것만 직접 입력하면 됩니다. 변수에 마우스를 올려놓으면 변수의 값을 볼 수 있으나, 간단한 표현만 인식할 수 있습니다. 스택 프레임은 재귀를 관찰하는 데 유용합니다. 스택 오버플로 및 분할 오류가 발생하는 경우 "예외"를 캡처하고 자동으로 잘못된 줄로 이동할 수도 있습니다. 특히 배열의 경우: C 언어의 배열은 함수에 의해 전달된 후 포인터로 변질됩니다. 표현식을 직접 추가하면 첫 번째 요소만 볼 수 있습니다. 이때 강제로 고정 크기 배열 포인터로 변환된 후 역참조될 수 있습니다. 예를 들어 快捷键:vscode: Visual Studio Code 常用快捷键 - 志文工作室。英文文档中当然有快捷键的说明,还有Cheet Sheet可以看,而且英文文档会更新。这个单独列出来仅给初学者。 如果遇到错误,先看底下的“某些可能出现的错误”以及看评论区。 如果你不需要调试,可以直接右键选run code,或者点右上角的播放按钮。如果在终端里运行,可以输入数据,但是少了显示时间的功能;在“输出”中则上面两项相反。 在终端中按Ctrl + C可以终止程序运行,下一次运行前必须保证当前程序已经终止了(对于task也是一样的)。如果你想要复制,选中内容后直接按一下右键就可以了;粘贴则是在未选中时按右键;这个操作仅限于Win10,ctrl+c也可以复制但可能一不小心就把程序终止了。 用它还可以在非工作区内编译运行程序,不过默认用的是gcc,除非把executorMap放到全局设置里。按照我的配置,task和Code Runner还有一点不同:working directory。前者是你打开的文件夹,后者是文件所在的文件夹。当然它们也都可以自己修改。 其实Code Runner只是代替你手动输命令,功能并不强,算是适用场景不同吧。不要以为run code跑个Hello World很简单,Code Runner就很强、前面那么多配置都是垃圾了。 另外,楼下的答主韩骏就是此扩展作者,有事统统找他(滑稽)。 如果你想进行少量的多文件编译,C语言直接用 如果你想进行大量的多文件编译,请学习如何写makefile或使用cmake。然后把tasks的命令改成调用make(或mingw32-make)等。 如果你想使用别人的库,比如ffmpeg,可能需要在命令中指定 오류가 발생하면 먼저 아래의 "가능한 오류"와 댓글 영역 디버그가 필요하지 않은 경우 직접 마우스 오른쪽 버튼을 클릭하여 실행 코드를 선택하거나 오른쪽 상단의 재생 버튼을 클릭하면 됩니다. 터미널에서 실행하면 데이터를 입력할 수 있지만 "출력"에 시간을 표시하는 기능이 없어 위의 두 항목이 반전됩니다. 다중 파일 컴파일을 많이 하고 싶다면 makefile 작성 방법이나 cmake 사용법을 배워보세요. 그런 다음 작업 명령을 변경하여 make(또는 mingw32-make) 등을 호출합니다. 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
。Code Runner
多文件编译
gcc 源文件1.c 源文件2.c 头文件1.h
这样就好,C++用g++。默认生成a.exe,加-o可指定输出文件名,其余选项百度gcc使用教程。如果需要多次编译可以写一个批处理。-I
、-l
(小写的L)、-L
소량의 다중 파일 컴파일을 수행하려면 C 언어에서 직접
gcc 소스 파일 1.c 소스 파일 2.c 헤더 파일 1.h
를 사용합니다. 괜찮습니다. C++ g++를 사용하세요. A.exe는 기본적으로 생성되며 -o를 추가하여 출력 파일 이름을 지정하고 나머지 옵션은 Baidu gcc 사용법 튜토리얼입니다. 여러 번 컴파일해야 하는 경우 일괄 프로세스를 작성할 수 있습니다. -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. 一些其它可能出现的错误”。遇到问题优先查看那里是否已经提了。
我的一些其他的设置,用在全局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加雅黑嘛,也还行吧,不过能用更好的干嘛不用呢。
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应该就没有这些问题了。
헤더 파일을 찾을 수 없는 또 다른 오류:
이 기본 타겟은 소스코드에 하드코딩되어 있어서 여기저기 찾아보았지만 수정할 수 있는 일반적인 방법을 찾을 수 없었습니다. clang의 소스 코드를 다운로드하고 직접 변경한 다음 clang 자체를 컴파일하면 해결할 수 있습니다. 또는 mingw를 사용하지 않고 Windows SDK를 설치하면 기본 대상을 준수합니다. --target=x86_64-w64-mingw
这个参数才行。
这个默认target是写死在源代码里的,我找了一圈没找到正常修改办法。下载clang的源代码,自己改掉,再编译clang本身,也许可以解决。或者装Windows SDK而不使用mingw,这样就符合默认target了。
当然这个时候最简单的办法就是用gcc编译。
其实这部分本来是本文的主打部分的,但是确实会引入太多概念,而且效果也不是那么好(因为没有libc++),现在全都放在这里变成可选内容。理论上在WSL里用更好,又但也许这样会从一个坑跳到另一个坑,我没试过。本部分仅留作踩坑经验。
环境
配置
--target=x86_64-w64-mingw
。clang的默认target为msvc,不加就会找不到头文件C_Cpp.errorSquiggles
、C_Cpp.autocomplete
、C_Cpp.suggestSnippets
--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를 설치하세요.
온톨로지+컴파일러+확장으로 보면 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를 읽어보시길 권합니다. 영어의 실제 적용을 경험해 보는 것도 좋습니다.
getchar();
를 한두 개 추가하면 됩니다. 가끔 두 개가 사용되는 이유를 모르겠습니다. C 언어 교사에게 문의하거나, system("pause")
를 사용하거나, 중단점을 추가하거나, launch.json에 내장된 터미널(externalConsole false)을 사용하세요. 외부 터미널 사용을 고집하고 아무것도 하지 않고 실행 후 일시 중지하고 싶다면 VSC는 할 수 없습니다. 적어도 내 구성으로는 할 수 없으며 공부하고 싶지 않습니다. 내장 터미널을 사용하기 때문입니다. getchar();
,不明白为什么有时要用两个?去问你们C语言老师;或用system("pause")
,或加断点,或者launch.json里用内置终端(externalConsole false)。如果你硬要用外置终端且要什么都不做,就想运行后暂停在那里,那么VSC办不到,至少我的配置办不到,我也不想研究,因为我用内置终端。图形化的方式:右键“此电脑”,选属性;或者按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를 사용할 때 #includeC:mingwbingcc
에 있으면 C:mingwbin
을 입력하세요. Win은 대소문자를 구분하지 않습니다. 🎜🎜명령줄 방법: cmd 또는 PS를 열고 setx /m path "%path%;C:mingwbin"
. 이 명령은 관리자 권한이 필요하지 않으며 터미널이 종료될 때 종료되지 않습니다(위와 동일한 그래픽 효과가 있음). 🎜🎜아직 수정방법을 모르신다면 바이두나 빌리빌리에서 "환경변수"를 검색해서 영상을 보시면 됩니다. 대부분 C는 아니지만 차이가 크지 않으니🎜실수로 삭제하지 않도록🎜 주의하세요. 🎜궁금한 점이 있으시면 메시지를 남겨주시면 논의할 수 있지만, 자세히 설명하는 것이 가장 좋습니다. 그리고 다시 말씀드리지만, "preLaunchTask가 코드 1로 종료되었습니다"라는 문장만 말하지 마세요. 이 문장은 쓸모가 없습니다.
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !
위 내용은 VSCode에서 C 및 C++ 프로그램을 작성하고 실행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!