Heim > Artikel > Entwicklungswerkzeuge > So schreiben und führen Sie C- und C++-Programme in VSCode aus
Verwandte Empfehlungen: „vscode Basis-Tutorial“
Viele Inhalte dieses Artikels können der offiziellen VS-Code-Dokumentation entnommen werden:
C++-Programmierung mit Visual Studio Codeund der Dokumentation jeder Erweiterung, und sie werden auch aktualisiert (dieser Artikel wurde auch mehreren größeren Updates unterzogen), wenn Sie möchten aktualisieren. Um mehr zu erfahren, können Sie es sich ansehen. Dieser Artikel ist im Grunde das Ergebnis vieler Versuche. Sollten Fehler vorliegen, weisen Sie diese bitte darauf hin. Endeffekt: Echtzeitanzeige von Fehlern, Codeausschnitten, Vervollständigung, Formatierung, Kompilierung einzelner Dateien und Debugging während der Kompilierungsphase.
1. Umgebungsvorbereitung
Laden Sie den Compiler herunter: MinGW-w64 – für 32- und 64-Bit-Windows Scrollen Sie ein wenig nach unten und wählen Sie x86_64-posix-seh
in der neuesten Version. Es ist am besten, nicht Neueste Version herunterladen zu verwenden. Dies ist ein Online-Installationspaket. Der Download kann aufgrund der inländischen „Netzwerkumgebung“ fehlschlagen. Wenn der Download des Browsers fehlschlägt, versuchen Sie, ihn über Thunder herunterzuladen oder eine Verbindung zum Hotspot Ihres Mobiltelefons herzustellen. Wenn der Download immer noch fehlschlägt, verwenden Sie eine Methode, die Ihnen den Zugriff auf Google ermöglicht.
Für Debian Linux verwenden Sie sudo apt update; sudo apt install build-essential
Das ist es. 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
Überprüfen
Drücken Sie Win+R, führen Sie cmd aus (überspringen Sie diesen Schritt nicht) und geben Sie gcc ein. Anstelle von „Kein interner oder externer Befehl“ oder „Gcc kann nicht erkannt werden“ wird die Meldung „Keine Eingabedateien“ angezeigt „Element als Cmdlet, Funktion oder Skript. Der Name der Datei oder des ausführbaren Programms“. Wenn es sich um „keinen internen oder externen Befehl“ handelt, bedeutet dies, dass sich der Ordner, in dem sich gcc befindet, nicht im Pfad der Umgebungsvariablen befindet und hinzugefügt werden muss. Wenn das Problem nach dem Hinzufügen weiterhin besteht, starten Sie neu. Wenn es nach dem Neustart immer noch nicht funktioniert, stimmt etwas mit Ihren eigenen Vorgängen nicht.
gcc -v
ein, um die gcc-Version anzuzeigen. Wenn die angezeigte Version anders/älter ist als die, die Sie gerade heruntergeladen haben, bedeutet das, dass sich im Pfad eine alte Version des Compilers befindet, die möglicherweise durch die Installation anderer IDEs installiert wurde. Sie müssen den ursprünglichen gcc-Pfad in Path entfernen. 🎜🎜Diese beiden Überprüfungen 🎜 müssen übereinstimmen 🎜, andernfalls müssen die Umgebungsvariablen geändert werden. Seien Sie vorsichtig: Löschen Sie nicht versehentlich. 🎜Nicht empfohlen/Erweiterungen, die nicht installiert werden müssen:
C/C++-Snippets: Snippets verwenden Codeblöcke und den Effekt ist Baidus eigenes ;Obwohl das Installationsvolumen dieser Erweiterung hoch ist, halte ich es persönlich für nicht sehr nützlich. Mit cpptools und clangd können Sie auch andere Snippets-Erweiterungen auswählen oder sogar Ihre eigenen definieren
Der Compiler ist die Quelle. Der Code wird in eine ausführbare Datei umgewandelt, und der Editor ist die Software, die Sie eingeben. Notepad ist ein Editor und VSC ist ebenfalls ein Editor.
Der Editor kann das Programm nicht kompilieren und ausführen.vscode
zu erstellen. Der Grund dafür, dass in der Ressourcenverwaltung kein neuer Ordner erstellt wird, liegt darin, dass der Windows Explorer nicht zulässt, dass das erste Zeichen eines erstellten Ordners ein Punkt ist (unterstützt nach 1903). Erstellen Sie dann launch.json, task.json, Settings.json ( ab. Darstellung: Der Inhalt dieser Dateien ist wie folgt. Nach dem Kopieren des folgenden Codes fügt Zhihu automatisch einige Zeilen davor ein, die besagen, dass alle Rechte vorbehalten sind. Sie müssen ihn löschen, wenn Sie ihn tatsächlich verwenden. Einige Stellen können optional geändert werden. Schauen Sie sich also selbst die Kommentare an. Hinweis: Wenn Sie in C++ schreiben, muss ein Teil von task.json geändert werden. externalConsole kann nach Ihren Wünschen geändert werden; cwd kann der relative Pfad sein, wenn das Programm ausgeführt wird, kann er bei Bedarf in ${fileDirname} geändert werden (Danke @). xhx). Ich habe lldb noch nie verwendet, daher werde ich nicht viel sagen. Es ist normal, dass Typ und Anforderung die Farbe nicht ändern. Ursprünglich konnte man nach Oktober 2018 das integrierte Terminal verwenden, indem man externalConsole auf false setzte. Allerdings führte cpptools 0.26.1 im Oktober 2019 zu einem Fehler, der die Eingabe von Chinesisch über das integrierte Terminal unter unmöglich machte Win. Es ist immer noch nicht in der Lösung 0.29.0 verfügbar. Ich habe https://github.com/microsoft/MIEngine/pull/1025 geöffnet, um das Problem zu beheben, aber ein Monat ist vergangen und sie haben es nicht überprüft, daher ist es negativ Rezension. Wenn Sie C++ schreiben, muss der Compiler auf g++ geändert werden; wenn Sie keine zusätzlichen Warnungen wünschen, löschen Sie die -Wall-Warnung; ändern Sie -std entsprechend Ihren Anforderungen, aber c ++17 scheint eine Frage zu haben: Es ist am besten, höchstens c++14 zu verwenden. Unter Linux ist es nicht erforderlich, -fexec-charset hinzuzufügen. Wie auch immer, ich habe diesen Kommentaren hinzugefügt, aber ich kann sie immer noch nicht verstehen, Tutorial zur Verwendung von Baidu gcc. reveal steuert, ob während der Kompilierung zum Terminalbereich gesprungen werden soll. Sie können es nach Ihren Wünschen ändern; selbst wenn es auf „Nie“ eingestellt ist, wird es nicht automatisch springen und Sie können die Informationen trotzdem sehen, indem Sie manuell hineinklicken. Fügen Sie den Inhalt dieser Datei in „Benutzereinstellungen“ ein, um globale Einstellungen zu überschreiben, andernfalls sind sie nur im aktuellen Arbeitsbereich wirksam. Jeder dieser beiden Punkte hat seine eigenen Vorteile. Die Befehlszeile von Code Runner und einige Optionen können hier entsprechend Ihren eigenen Anforderungen geändert werden. Wenn Sie sie anpassen möchten oder wissen möchten, was sie bedeutet, lesen Sie bitte die Dokumentation dieser Erweiterung und das Tutorial zur Verwendung von Baidu gcc. Wenn das Terminal cmd (Win7Standard) verwendet, müssen Sie es auskommentieren oder 感谢@Wellin Boss提到的snippetSuggestions;不过用top有时还是有点问题的,所以改成可选。 如果你确定不需要使用别人的库,则现在的版本(0.18.0之后)不需要创建这个文件了,cpptools会自动使用默认的设置。所以本文也不再包含此文件的配置。 如果你自己编写了头文件又不在workspaceFolder下,或是使用别人的库,就需要手动创建这个文件放到 一些曾经的经验:launch.json-Code
// 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相对应
}]
}
tasks.json-Code
// 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
terminal.integrated.shell.windows
in PowerShell ändern; Win10 ist standardmäßig auf PS eingestellt und muss nicht geändert werden. terminal.integrated.shell.windows
改为PowerShell;Win10默认就是PS就不用改。{
"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
.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
ablegen. Vorlagen finden Sie unter:
Sie können Code schreiben, nachdem Sie eine neue Datei erstellt haben. Das Suffix des C-Quellcodes ist .cpp oder .C oder .cxx (sollten Sie das tun). lehre dich das auch...). Codedateien können im Arbeitsbereich gespeichert werden. Es ist nicht erforderlich, sie im .vscode-Ordner abzulegen. Der Pfad (einschließlich des Dateinamens) sollte jedoch keine chinesischen Zeichen und Anführungszeichen enthalten Es ist am besten, keine Leerzeichen zu haben. Der Hauptgrund ist, dass viele Symbole eine gültige Shell-Syntax sind. Versuchen Sie andernfalls, mit rm eine Datei namens -rf unter Linux zu löschen. Ich kann es definitiv nicht aufschreiben, ohne es auszuprobieren. Drücken Sie Alt+Umschalt+F (oder verwenden Sie das Rechtsklick-Menü), um die Formatierungsmethode zu ändern, z. B. ob die geschweiften Klammern in Zeilen umgebrochen werden C++ VSCode. Wenn Intellisense angezeigt wird, drücken Sie die Tabulatortaste, um den Code zu vervollständigen. Beim Eingeben von Snippets werden mehrere Sprungpunkte angezeigt. Drücken Sie die Tabulatortaste, um zum nächsten zu springen.
Nachdem Sie für kurze Zeit (eine Sekunde) aufgehört haben zu tippen, werden Ihnen einige suggestive Warnungen angezeigt (z. B. dass Sie Variablen deklarieren, sie aber nicht verwenden). Wenn Sie sich unwohl fühlen, gibt es Möglichkeiten, die Eingabeaufforderung zu verhindern. Wenn Sie beispielsweise -Wall entfernen, wird die Anzahl der Eingabeaufforderungen verringert. Wenn Sie weitere Warnungen entfernen möchten, möchte ich Sie daran erinnern: -Wno-.... Nachdem Sie die Parameter gefunden haben, können Sieverwenden oder sie zu verschiedenen Flags hinzufügen. Machen Sie auf jeden Fall Ihre eigene Recherche. Allerdings unterstützt Lint von cpptools das Setzen von Flags nicht, was etwas verwirrend ist. Folgen Sie: Fehler- und Warnflags? · Problem Nr. 2814 · microsoft/vscode-cpptools Als nächstes sprechen wir über das Ausführen. Erstens ist die Kompilierung der Prozess des Generierens einer ausführbaren Datei aus dem Quellcode. Beim Debuggen handelt es sich eigentlich um eine besondere Art von Operation, mit der die Ausführung des Programms gesteuert und spätere Änderungen erleichtert werden können. Dies sind zwei verschiedene Phasen. Die Kompilierung kann erfolgreich sein, das Debuggen schlägt jedoch fehl, die Kompilierung kann direkt fehlschlagen oder die Kompilierung kann fehlschlagen, bevor die Kompilierung beginnt. Wenn Sie einfach „Vorgang fehlgeschlagen“ sagen, können andere nicht erkennen, in welchem Stadium sich das Problem befindet. Wenn festgestellt wird, dass eine bestimmte Phase bestanden wurde, müssen Sie sich um diese Phase keine Sorgen machen und können sich auf die Lösung von Problemen in anderen Phasen konzentrieren.
Drücken Sie Strg+Umschalt+B, um einfach zu kompilieren, und drücken Sie F5, um zu kompilieren und zu debuggen. Ursprünglich bedeutete Strg+F5 Ausführen, aber nicht Debuggen, aber jetzt unterstützt cpptools es nicht, sodass es trotzdem debuggt. Folgen Sie: #pragma GCC diagnostic ignored
Unterstützung „Ausführen ohne Debuggen“ · Problem Nr. 1201 · microsoft/vscode-cpptools
launch.json. Nachdem Sie mit dem Debuggen begonnen haben, drücken Sie f11, um Schritt für Schritt fortzufahren. Die Codezeile, auf die der Pfeil zeigt, ist der Code, der als Nächstes ausgeführt werden soll. F5 wird bis zum nächsten Haltepunkt ausgeführt, und Sie können ihn auswählen bis zur angegebenen Zeile laufen.
Auf der linken Seite befindet sich eine Debugging-Leiste, in der Sie die Werte der Variablen sehen können. Wenn keine automatische Leiste vorhanden ist, können Sie diese manuell hinzufügen: Wählen Sie den zu überwachenden Ausdruck im Code aus, klicken Sie mit der rechten Maustaste und dort Es gibt Optionen, um es direkt zur Uhr hinzuzufügen. Nur komplizierte Eingaben müssen von Hand eingegeben werden. Sie können den Wert der Variablen sehen, indem Sie mit der Maus darauf fahren, es können jedoch nur einfache Ausdrücke erkannt werden. Stapelrahmen sind nützlich zur Beobachtung der Rekursion. Im Falle eines Stapelüberlaufs und eines Segmentierungsfehlers können Sie auch eine „Ausnahme“ erfassen und automatisch zur Zeile mit dem Fehler springen. Speziell für Arrays: Arrays in der C-Sprache degenerieren zu Zeigern, nachdem sie von Funktionen übergeben wurden. Wenn Sie einen Ausdruck direkt hinzufügen, können Sie nur das erste Element sehen. Zu diesem Zeitpunkt kann die Konvertierung in einen Array-Zeiger fester Größe und die anschließende Dereferenzierung erzwungen werden: Beispielsweise wird 快捷键: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,可能需要在命令中指定 Wenn Sie auf einen Fehler stoßen, lesen Sie zuerst die „Einige mögliche Fehler“ unten und den Kommentarbereich Wenn Sie nicht debuggen müssen, können Sie direkt mit der rechten Maustaste klicken und „Code ausführen“ auswählen oder auf die Wiedergabeschaltfläche in der oberen rechten Ecke klicken. Wenn es im Terminal ausgeführt wird, können Daten eingegeben werden, aber die Funktion der Zeitanzeige fehlt; bei „Ausgabe“ sind die beiden oben genannten Punkte umgekehrt. int arr[10]
nach der Übergabe an die Funktion zu int * arr
. Fügen Sie *(int(*)[10])arr
zu Watch hinzu, damit Sie das vollständige Array sehen können. Die Länge muss jedoch angegeben werden. Seien Sie also vorsichtig, wenn Sie die Linie überschreiten. Oder ein einfaches Programm kann es immer mithilfe des globalen Variablenarrays sehen. Eine andere Schreibweise, die nur für gdb gültig und nicht void* ist: *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
gcc-Quelldatei 1.c Quelldatei 2.c Header-Datei 1.h
Dies ist in Ordnung, verwenden Sie C++ g++. Standardmäßig wird A.exe generiert. Fügen Sie -o hinzu, um den Namen der Ausgabedatei anzugeben. Die verbleibenden Optionen sind Baidu-Tutorials zur gcc-Verwendung. Wenn Sie mehrmals kompilieren müssen, können Sie einen Batch-Prozess schreiben. Wenn Sie viele Kompilierungen mehrerer Dateien durchführen möchten, lernen Sie, wie Sie Makefiles schreiben oder cmake verwenden. Ändern Sie dann den Tasks-Befehl, um make (oder mingw32-make) usw. aufzurufen. 🎜🎜Wenn Sie Bibliotheken anderer Leute verwenden möchten, z. B. ffmpeg, müssen Sie möglicherweise -I
, -l
(Kleinbuchstabe L), -L. Informationen zu bestimmten Parametern finden Sie in der Dokumentation dieser Bibliothek. Möglicherweise müssen Sie auch den Pfad zu c_cpp_properties.json hinzufügen, um Intellisense zu konfigurieren. 🎜🎜In diesen Fällen können Sie erwägen, einen separaten Arbeitsbereich zu erstellen und ihn nicht mit der Kompilierung einzelner Dateien zu teilen. Tatsächlich ist das Debuggen nur einer einzelnen Datei ohne Erstellen eines neuen Projekts der zukünftigen Verwendung und dem Verständnis großer IDEs nicht förderlich. Anfänger müssen jedoch nicht so viel beherrschen. Denken Sie nicht, dass das Erstellen eines Projekts sehr mühsam ist. 🎜🎜Kurz gesagt, diese haben nichts mit VSC zu tun. Bei der Verwendung anderer IDEs oder der manuellen Kompilierung treten ähnliche Probleme auf, was ebenfalls etwas kompliziert ist. In diesem Artikel werden diese nicht im Detail besprochen, sondern wir werden sie selbst lösen. 🎜🎜Speichern Sie den Ordner🎜🎜Nach dem 🎜Schreiben des Codes müssen Sie zum Schreiben den zuvor erstellten Ordner🎜 öffnen, andernfalls geht sämtliches Intellisense verloren und nur Code Runner kann verwendet werden. (Benötigt werden hauptsächlich diese vier JSONs. Um andere Ordner zu erstellen, müssen Sie diese JSONs kopieren, um sie verwenden zu können.) 🎜🎜Sie können eine Verknüpfung erstellen (zum Erstellen mit der rechten Maustaste klicken) und den Arbeitsbereichspfad als Parameter an das VSC-Hauptprogramm übergeben . Denken Sie daran, doppelte Anführungszeichen zu setzen; Sie können auch ein Symbol hinzufügen. 1.18 verfügt über einen echten virtuellen Arbeitsbereich und ein Fenster kann mehrere Ordner enthalten, die nicht zusammenpassen. Es gibt auch eine Funktion „Arbeitsbereich speichern“ im Menü „Datei“, aber ich habe sie nicht ausprobiert, daher kann ich nicht garantieren, dass sie funktioniert wird in Ordnung sein. 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Temporäre Dateien bereinigen🎜🎜Gemäß dieser Konfiguration wird es nach der Langzeitkompilierung des Codes definitiv viele Exes geben, die möglicherweise in verschiedenen Ordnern verstreut sind. 🎜<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应该就没有这些问题了。
--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
12. Verwenden von Clang unter WinF: Warum sollte ich Clang installieren?
A: Die Fehleraufforderung ist benutzerfreundlicher. Und: Inwiefern ist Clang besser als GCC?
--target=x86_64-w64 hinzu -mingw
zum Kompilierungsbefehl >. Das Standardziel von clang ist msvc. Wenn Sie es nicht hinzufügen, finden Sie die Header-Datei nicht 🎜🎜C_Cpp.errorSquiggles
, C_Cpp.autocomplete
, C_Cpp.suggestSnippets
sind alle Deaktivieren Sie es, sonst wird es wiederholt, wie von clangd gemeldet 🎜🎜🎜🎜🎜compile_flags.txt🎜🎜🎜🎜Tatsächlich dient es zum Festlegen dieser Kompilierungsoptionen grundsätzlich dazu, -Wall und zu verwenden --target=x86_64-w64-mingw. clangd verwendet nur die Datei „compile_flags.txt“, die der ausgewerteten Datei am nächsten kommt. Da Sie sicherstellen müssen, dass ein --target vorhanden ist, erstellen Sie für den Fallback am besten ein Stammverzeichnis auf der Workspace-Festplatte. 🎜Aber was noch verwirrender ist, ist, dass sowohl C als auch C++ .h als Header-Datei verwenden. Wenn Sie keine Standarddatei hinzufügen, können .c und .cpp korrekt sein, aber .h verwendet den C-Modus. Es scheint keine gute Lösung für den Fallback zu geben. Auch hier gilt: Installieren Sie einfach das Windows SDK.
In Bezug auf die Größe der Ontologie + Compiler + Erweiterungen ist die Festplattenbelegung nicht zu gering, wenn sie nur zum Schreiben von C verwendet wird, bis zu 1 GB. Die Speichernutzung ist immer noch relativ gering (ca. 0,5 g); es gab einen Fehler, der viel Speicher verbrauchte, aber natürlich wurde er vor langer Zeit behoben.
Der erste Vorteil von VSC könnte sein, dass es gut aussieht? Obwohl er nicht speziell für C/C++ entwickelt wurde, dürfte er derzeit der modernste Nur-Text-Editor sein. Und Lint allein ist viel besser als Wintc, Cfree und Dev C++, ganz zu schweigen davon, dass die eigene Debug-Funktion von Dev C++ Fehler aufweist.
Andere IDEs, CodeBlocks, sind immer noch am Leben, obwohl das historische Gepäck sehr offensichtlich ist. Clion verfügt über eine schöne Benutzeroberfläche und leistungsstarke Funktionen, ist jedoch nur auf Englisch verfügbar, daher kann der Einstieg etwas schwierig sein. Studenten können kostenlos einen Schlüssel beantragen, andernfalls ist eine Gebühr zu entrichten. Wenn Sie Windows SDK verwenden möchten, dient die Community-Version als Nächstes nur dazu, die C++-Desktopentwicklung einzubinden. Dies entspricht dem Standardziel von Clang, aber ich denke, es ist besser, VS direkt zu verwenden. Für die Kommentare anderer Befragter zu einigen C-IDEs können Sie diese Antwort lesen: Ein Neuling ohne Programmierkenntnisse möchte die Sprache C lernen. Sollte er VC6 oder VS2015 verwenden? . 🔜 Warten darauf, dass Lehrer IDEs in QQ-Gruppen veröffentlichen. Wenn Sie die Möglichkeit dazu haben, empfehle ich Ihnen dennoch, die Dokumentation von VSC zu lesen:
Dokumentation für Visual Studio CodepreLaunchTask „Compile“ wurde beendet, der Exit-Code ist 1: Es liegt ein Fehler beim Kompilieren vor und Sie führen es mit F5 aus. Wenn Sie auf „Noch debuggen“ klicken, wird die Datei erfolgreich kompiliert Das letzte Mal wird debuggt. Tatsächlich lösen alle Kompilierungsfehler diesen Fehler aus. Ist es nicht normal, dass der Fehlerrückgabewert 1 ist? Mir also nur zu sagen, dass diese Eingabeaufforderung erscheint, nützt überhaupt nichtsgetchar();
,不明白为什么有时要用两个?去问你们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"
, es bedeutet, dass etwas schief gelaufen ist und niemand den Grund sehen kann,
. Wenn Hello World debuggt und normal ausgeführt werden kann, dieser Fehler jedoch in einem anderen Code auftritt, liegt wahrscheinlich ein Fehler in Ihrem eigenen Code vor. Das Terminal wird von der Aufgabe wiederverwendet. Drücken Sie zum Schließen eine beliebige Taste: Haben Sie schon einmal von „Zum Fortfahren eine beliebige Taste drücken“ gehört? Das bedeutet dieser Satz. Dieser Satz ist noch nutzloser als der Exit-Code 1. Er enthält überhaupt keine gültigen Informationen. Er wird unabhängig von Erfolg oder Fehler angezeigt. Kann nicht geöffnet werden..., Datei nicht gefunden (file:///build/glibc-OTsEL5/glibc-2.27/...): Ich bin unter Linux auf dieses Problem gestoßen, es scheint, dass Sie es sein sollten. Versuchen Sie es Schritt in einer Bibliotheksfunktion, aber es gibt keinen Quellcode. Die Lösung besteht darin, die nächste Glibc am angegebenen Speicherort abzulegen. Oder sehen Sie sich Folgendes an: Deaktivieren Sie „Datei kann nicht geöffnet werden“ während des Debuggens · Problem Nr. 811 · Microsoft/vscode-cpptools.
undefinierter Verweis auf xxx ... Linker-Befehl fehlgeschlagen: Eine nicht deklarierte Funktion wurde aufgerufen. Möglicherweise ist der Funktionsname falsch eingegeben oder es ist keine Include-Header-Datei vorhanden. Kurz gesagt, es liegt ein Fehler in Ihrem eigenen Code vor. 🎜ld: Ausgabedatei kann nicht geöffnet werden ... Berechtigung verweigert: Das ursprüngliche Programm läuft noch (z. B. eine Endlosschleife) und kann nicht überschrieben werden, sodass die Generierung fehlschlägt. Beenden Sie diesen Vorgang einfach im Task-Manager. 🎜Unter MinGW führt die Verwendung von strcmp im Überwachungsfenster dazu, dass gdb aus unbekannten Gründen abstürzt und beendet wird. Normal unter Linux. 🎜Nach dem Umbenennen der Datei befindet sich der vorhandene Lint weiterhin in der Problemspalte. Haltepunkte können nach dem Ändern der Datei ungültig werden. Es gibt auch einige andere kleine Fehler wie diesen. Im Allgemeinen schließen Sie VSC einfach und öffnen Sie es erneut. 🎜Diese Konfiguration kann nicht mit Bash für Windows oder WSL verwendet werden, da Backslashes in Bash als Zeilenumbrüche erkannt werden. cpptools stellt jetzt Bash on Windows Launch-Snippets für launch.json bereit. Jetzt gibt es eine weitere Remote-WSL. Aber ich habe nicht versucht, eines davon zu verwenden. 🎜Wenn Sie debuggen möchten, aktivieren Sie die Optimierung nicht. Mit -Og kann Gcc weiterhin einige Debug-Informationen behalten, aber nach der Verwendung von Clang kann GDB nicht zum Debuggen verwendet werden. Trotzdem stieß ich beim Schreiben von Code auf das Problem, dass ich nicht in eine Funktion springen konnte, VS jedoch. 🎜vscode-clangd konnte printf, scanf und realloc beim ersten Mal nicht richtig erkennen, aber nach einmaliger Verwendung im Code war es in Ordnung. Ich weiß auch nicht warum. 🎜Zu diesem Zeitpunkt sollte kein & vorhanden sein: Das Terminal sollte so geändert werden, dass es PowerShell oder die executorMap des Code Runners verwendet, um die beiden Befehle zu verwenden, die ich auskommentiert habe. Weitere Informationen finden Sie in der Beschreibung von „settings.json“ oben. 🎜crt0_c.c:(.text.startup+0x2e): undefinierter Verweis auf „WinMain“: Es gibt keine Hauptfunktion, oder „main“ wird als „main“ geschrieben. 🎜Bei Verwendung von clang+mingw unter Win meldet #includeC:mingwbingcc
befindet, geben Sie C:mingwbin
ein. Win unterscheidet nicht zwischen Groß- und Kleinschreibung. 🎜🎜Befehlszeilenmethode: Öffnen Sie cmd oder PS, setx /m path "%path%;C:mingwbin"
. Dieser Befehl erfordert keine Administratorrechte und wird nicht beendet, wenn das Terminal beendet wird (er hat den gleichen grafischen Effekt wie oben). 🎜🎜Wenn Sie immer noch nicht wissen, wie Sie es ändern können, können Sie auf Baidu oder Bilibili nach „Umgebungsvariablen“ suchen und sich das Video ansehen. Die meisten von ihnen sind nicht C, aber der Unterschied ist nicht groß. Achten Sie nur darauf, dass Sie sie nicht versehentlich löschen. 🎜Wenn Sie Fragen haben, können Sie eine Nachricht zum Besprechen hinterlassen, aber am besten ist es, sie im Detail zu beschreiben. Und ich sage es noch einmal: Sagen Sie mir nicht einfach den Satz „preLaunchTask beendet mit Code 1“. Dieser Satz ist nutzlos.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:Einführung in die Programmierung! !
Das obige ist der detaillierte Inhalt vonSo schreiben und führen Sie C- und C++-Programme in VSCode aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!