Heim  >  Artikel  >  Entwicklungswerkzeuge  >  So schreiben und führen Sie C- und C++-Programme in VSCode aus

So schreiben und führen Sie C- und C++-Programme in VSCode aus

青灯夜游
青灯夜游nach vorne
2020-09-16 11:32:1010249Durchsuche

So schreiben und führen Sie C- und C++-Programme in VSCode aus

Verwandte Empfehlungen: „vscode Basis-Tutorial

0. Dieser Artikel richtet sich an Anfänger und jeder Schritt wird detailliert beschrieben. Lesen Sie diesen Artikel, um etwas über die Befehlszeile, die Programmkompilierung und das Debuggen sowie die Verwendung von VS-Code zu erfahren. Wenn Sie diesen Artikel als problematisch empfinden, gebe ich Ihnen eine vereinfachte Version: Installieren Sie die Erweiterungen gcc und c/c++, öffnen Sie den Ordner, klicken Sie auf „Quellcode öffnen“, F1, erstellen und debuggen Sie die aktive Datei und fertig.

Viele Inhalte dieses Artikels können der offiziellen VS-Code-Dokumentation entnommen werden:

C++-Programmierung mit Visual Studio Code

und 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

VSCs offizielle Website, Download und Installation, ich werde nicht auf Details eingehen. VSC ist nur ein einfacher Texteditor (Editor), keine IDE (integrierte Entwicklungsumgebung). Es enthält keinen Compiler (Compiler) und viele andere Funktionen. Daher muss der Compiler selbst installiert werden.

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.

„Installieren“ Sie den Compiler: Was herunterkommt, ist ein 7z-komprimiertes Paket. Wenn Sie nicht wissen, wie man ein komprimiertes Paket dekomprimiert, können Sie auf Baidu nach „So dekomprimieren Sie ein komprimiertes Paket“ suchen. Bewahren Sie die Datei nach dem Entpacken an einem Ort auf, an dem sie nicht leicht gelöscht werden kann. Sie können einige der überlappenden Dateien entfernen. Seien Sie optimistisch, was den vollständigen Pfad des bin-Ordners angeht. In meinem Bild ist es C:mingw64bin, und fügen Sie ihn dem PATH in der Umgebungsvariablen hinzu. Wenn Sie nicht wissen, wie Sie diesen Schritt ausführen, lesen Sie „B. So fügen Sie Umgebungsvariablen hinzu“ am Ende dieses Artikels (Sie können auf dieser Seite mit Strg+F suchen).

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即可。

So schreiben und führen Sie C- und C++-Programme in VSCode aus
So schreiben und führen Sie C- und C++-Programme in VSCode aus

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

验证

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

gcc -v

So schreiben und führen Sie C- und C++-Programme in VSCode aus
So schreiben und führen Sie C- und C++-Programme in VSCode aus

Die Reihenfolge ist nicht wichtig; der Pfad kann sowieso unterschiedlich sein, stellen Sie einfach sicher, dass sich gcc.exe in diesem Ordner befindet

Ü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.

🎜Geben Sie 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. 🎜
So schreiben und führen Sie C- und C++-Programme in VSCode aus
Machen Sie sich jetzt keine Sorgen über das Klirren, irgendetwas muss nicht stimmen. Das Clang-Tutorial wurde an das Ende dieses Artikels verschoben.
So schreiben und führen Sie C- und C++-Programme in VSCode aus
Geben Sie die letzte Zeile der gcc -v-Ausgabe ein. Die Version sollte Ihrer eigenen entsprechen, zum Beispiel muss 64-Bit x86_64 und seh haben Es ist sehr praktisch, eine einzelne Datei auszuführen; es kann jedoch nicht debuggt werden
Nicht empfohlen/Erweiterungen, die nicht installiert werden müssen:

    GBKtoUTF8: Konvertieren Sie GBK-codierte Dokumente in UTF8-codierte Dokumente. Diese Erweiterung wurde schon lange nicht mehr aktualisiert und weist möglicherweise schwerwiegende Fehler auf.
  • C++ Intellisense: verwendet gtags, die Wahl für die erste Version dieses Artikels. Der Effekt ist sehr allgemein.
  • Automatische Vervollständigung einbeziehen: Bietet die Vervollständigung des Header-Dateinamens. Jetzt verfügen cpptools und vscode-clangd bereits über diese Funktion, sodass keine Installation erforderlich ist.

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

  • Ergänzendes Wissen

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
    , da dies die Aufgabe des Compilers ist.
  • MinGW ist eine Portierung von gcc unter Windows. gcc ist die weltweit beliebteste C/C++-Compilerkombination. Der Name gcc bezieht sich aber auch auf das Programm, das die C-Sprache kompiliert, und g++ ist der C++-Compiler. Das heißt, gcc-Programme und g++-Programme sind in der gcc-Suite und in MinGW enthalten. Wenn nur gcc erwähnt wird, müssen Sie es entsprechend dem Kontext unterscheiden. Tatsächlich haben MinGW und MinGW-w64 ähnliche Namen, es handelt sich um zwei verschiedene Projekte . Der Einfachheit halber bezieht sich MinGW in diesem Artikel tatsächlich auf MinGW-w64. MinGW selbst wurde schon lange nicht mehr aktualisiert, verwenden Sie es nicht Hoppla, es stellt sich heraus, dass MinGW am Leben ist, aber es kann nur 32-Bit-Programme produzieren. Die Erweiterung ist eine Erweiterung. Das Plug-In ist ein Plug-In und VSC verwendet Ersteres heißt so. Die meisten Artikel verwenden eine Mischung aus beidem, was nicht streng, aber verständlich ist. Sie müssen lernen, den Hauptwiderspruch zu verstehen. Natürlich ist alles, was in diesem Artikel verwendet wird, korrekt Speichern Sie den Codeordner, der als Arbeitsbereichsordner bezeichnet wird.
  • Der Pfad darf keine chinesischen Zeichen und Anführungszeichen enthalten. Ich verwende am besten keine Leerzeichen. C und C++ müssen jeweils unterschiedliche Ordner erstellen, sofern kein virtueller Arbeitsbereich verwendet wird. Wählen Sie im vorherigen Abschnitt nicht den Ordner aus, in dem der Compiler gespeichert ist. Der Quellcode und der Compiler sollten getrennt aufbewahrt werden.
  • Öffnen Sie VSC,
  • wählen Sie „Ordner öffnen“; es ist am besten, „Arbeitsbereichsordner hinzufügen“ auszuwählen. Ich habe ihn noch nie verwendet, daher kann ich nicht garantieren, dass er in Ordnung ist. Klicken Sie, um einen neuen Ordner mit dem Namen .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 (
  • nicht Setting.json
  • ) und legen Sie sie im Ordner
.vscode

ab. Darstellung:

So schreiben und führen Sie C- und C++-Programme in VSCode aus
Es muss in .vscode sein, nicht parallel machen

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.

launch.json-Code

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.

// 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相对应
    }]
}

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 github.com/microsoft/MI geöffnet, um das Problem zu beheben, aber ein Monat ist vergangen und sie haben es nicht überprüft, daher ist es negativ Rezension.

tasks.json-Code

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.

// 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

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 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就不用改。

感谢@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

一些曾经的经验:

3. Code schreiben, kompilieren und debuggen

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 Sie

verwenden 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 ignoredUnterstützung „Ausführen ohne Debuggen“ · Problem Nr. 1201 · microsoft/vscode-cpptools

In den frühen Phasen des Schreibens eines Programms empfehle ich dringend, f5 nicht als Kompilierung zu verwenden, da einige Fehler nur Warnungen generieren , Verhindert die Kompilierung nicht, aber je früher diese Dinge angegangen werden, desto besser. Die Kompilierungsinformationen finden Sie unten im Bereich „Terminal“. Wenn der Code fehlerhaft ist, können Sie darauf klicken, um die vom Compiler gemeldeten Informationen anzuzeigen sofort, was das Schreiben von Code erheblich erleichtert.

Um einen Haltepunkt hinzuzufügen, klicken Sie einfach vor die Spaltennummer. Sie können einen bedingten Haltepunkt hinzufügen, indem Sie mit der rechten Maustaste klicken. Wenn Sie es von Anfang an stoppen möchten, können Sie es zur Hauptfunktion hinzufügen oder es gibt eine Einstellung in

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 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

快捷键: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

Tastenkombinationen: vscode: Gemeinsame Tastenkombinationen für Visual Studio Code – Zhiwen Studio. Natürlich gibt es im englischen Dokument eine Beschreibung der Tastenkombinationen. Sie können auch das Cheet Sheet anzeigen und das englische Dokument wird aktualisiert. Dieser ist nur für Anfänger separat aufgeführt.

Wenn Sie auf einen Fehler stoßen, lesen Sie zuerst die „Einige mögliche Fehler“ unten und den Kommentarbereich

.

Code Runner

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.

Drücken Sie Strg + C im Terminal, um das Programm zu beenden. Sie müssen sicherstellen, dass das aktuelle Programm beendet wurde, bevor Sie es das nächste Mal ausführen (dasselbe gilt für Aufgaben). Wenn Sie kopieren möchten, klicken Sie einfach mit der rechten Maustaste, nachdem Sie den Inhalt ausgewählt haben. Klicken Sie mit der rechten Maustaste, wenn er nicht ausgewählt ist. Strg + C kann auch kopiert werden, das Programm wird jedoch möglicherweise versehentlich beendet.

Es kann auch zum Kompilieren und Ausführen von Programmen in Nicht-Arbeitsbereichen verwendet werden, gcc wird jedoch standardmäßig verwendet, sofern executorMap nicht in den globalen Einstellungen platziert ist. Laut meiner Konfiguration gibt es einen Unterschied zwischen Task und Code Runner: Arbeitsverzeichnis. Ersteres ist der Ordner, den Sie geöffnet haben, und letzteres ist der Ordner, in dem sich die Datei befindet. Natürlich können sie auch selbst modifiziert werden.

So schreiben und führen Sie C- und C++-Programme in VSCode aus

Tatsächlich ersetzt Code Runner nur Ihre manuelle Eingabe von Befehlen
und seine Funktion ist nicht sehr stark. Es kann auf verschiedene Szenarien anwendbar sein. Denken Sie nicht, dass das Ausführen von Code zum Ausführen von Hello World einfach ist, Code Runner sehr leistungsfähig ist und alle vorherigen Konfigurationen Müll sind.
Kompilierung mehrerer Dateien

Wenn Sie eine kleine Menge der Kompilierung mehrerer Dateien durchführen möchten, verwendet die C-Sprache direkt 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. 一些其它可能出现的错误”。遇到问题优先查看那里是否已经提了。

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. Fehler „Header-Datei nicht gefunden“

So schreiben und führen Sie C- und C++-Programme in VSCode aus

  • gcc ist nicht im Pfad. Gehen Sie noch einmal zurück und sehen Sie sich den Überprüfungsschritt oben an.
  • C_cpp_properties.json wurde manuell konfiguriert und der enthaltene Pfad war falsch. Wenn Sie diese Datei nicht erstellt haben, machen Sie sich keine Sorgen und versuchen Sie es erneut. Wenn Sie sicherstellen, dass diese Punkte den Anforderungen entsprechen, habe ich keine andere Lösung ... oder wechseln Sie einfach zu den Tutorials anderer Befragter. Beachten Sie, dass dieser Satz der ultimative Fallback ist. Wenn Sie sicher sind, dass Sie keinen Fehler gemacht haben, brauchen Sie mich nicht zu fragen.
  • Ein weiterer Fehler, bei dem die Header-Datei nicht gefunden wurde:

So schreiben und führen Sie C- und C++-Programme in VSCode aus

Diese Situation liegt daran, dass das Standardziel von clang msvc ist. Sie müssen --target=x86_64-w64-mingwDieser Parameter funktioniert. <noscript> <img src="https://pic4.zhimg.com/50/v2-a7e1578ac1d50bcba9ccc3986ae607ad_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-raw style="max-width:90%" data-raw style="max-width:90%" class="origin_image zh-lightbox-thumb" width="463" data-original="https://pic1.zhimg.com/v2-a7e1578ac1d50bcba9ccc3986ae607ad_r.jpg?source=1940ef5c" alt="So schreiben und führen Sie C- und C++-Programme in VSCode aus" >Dieses Standardziel ist im Quellcode fest codiert. Ich habe herumgesucht und keine normale Möglichkeit gefunden, es zu ändern. Laden Sie den Quellcode von Clang herunter, ändern Sie ihn selbst und kompilieren Sie dann Clang selbst. Vielleicht können Sie das Problem lösen. Oder installieren Sie Windows SDK, anstatt mingw zu verwenden, das dem Standardziel entspricht. </noscript>
Der einfachste Weg ist derzeit natürlich das Kompilieren mit gcc.

--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.suggestSnippets12. Verwenden von Clang unter Win
Tatsächlich war dieser Teil ursprünglich der Hauptteil dieses Artikels, aber er führt zu viele Konzepte ein und der Effekt ist nicht so gut (da es keine libc++ gibt), jetzt ist er es Alles hier verfügbar. Wählen Sie den Inhalt aus. Theoretisch ist es besser, es in der WSL zu verwenden, aber vielleicht springt es von einer Grube zur anderen. Ich habe es nicht ausprobiert. Dieser Abschnitt dient nur der Erfahrung mit Fallstricken.

F: Warum sollte ich Clang installieren?
A: Die Fehleraufforderung ist benutzerfreundlicher. Und:
Inwiefern ist Clang besser als GCC?

F: Wie spricht man Clang aus?
A: Die richtige Antwort ist /?kl??/, das heißt, c spricht „ke“ aus; es basiert jedoch immer noch auf dem Verständnis beider Parteien. Beispielsweise ist es auch verständlich, SQL als zu sagen Kreis.

F: Warum muss ich sowohl Clang als auch MinGW installieren?
A: Weil Clang unter Win keine libc++ hat. Sie können auch VS installieren und das Windows SDK verwenden, für das kein MinGW erforderlich ist. Dies ist offizieller, aber größer. 🎜🎜F: Die Installation der MSVC-Integration ist fehlgeschlagen / es konnte keine Visual Studio-Installation gefunden werden...
A: Dies ist der Grund für den vorherigen Punkt, bei dem Clang standardmäßig das MSVC-Backend verwendet. In diesem Teil wird jedoch MinGW verwendet, sodass Sie dieser Eingabeaufforderung keine Beachtung schenken müssen. Andernfalls installieren Sie die Windows SDK-Umgebung🎜🎜🎜🎜LLVM-Downloadseite🎜: Laden Sie Clang auf dieser Seite herunter. Wählen Sie Windows (64-Bit) in den vorgefertigten Binärdateien aus, es ist nicht erforderlich, die .sig-Datei herunterzuladen🎜🎜vscode-clangd: Bietet Intellisense- und Lint-Funktionen für das Warehouse und die Verwendung, siehe: clangd/clangd🎜🎜🎜C/ C++-Clang-Befehlsadapter: Ich habe diesen Artikel bereits verwendet. Wenn es ein Problem mit vscode-clangd gibt, können Sie in Betracht ziehen, zu diesem zu wechseln. Wenn dies nicht der Fall ist, müssen Sie clang.cflags ändern Problem, installieren Sie es nicht. Clang-Format: Nur wenn Sie den Codestil anpassen möchten, hängt es von der Installation ab, z. B. ob die geschweiften Klammern umbrochen sind oder nicht. Sie müssen lernen, wie man 🎜🎜CodeLLDB verwendet: die vscode-Erweiterung von lldb, die eine Python-Umgebung erfordert; ich habe sie noch nie verwendet 🎜🎜🎜🎜Configuration🎜🎜🎜🎜Fügen Sie einen Satz --target=x86_64-w64 hinzu -mingwzum 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.

13. Meine Erfahrung beim Schreiben von Code

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 Code

Es ​​ist auch nicht kompliziert, die praktische Anwendung von Englisch zu erleben.

A. Einige andere mögliche Fehler

  • Wenn Sie nur „Hallo Welt“ schreiben, ohne Haltepunkte hinzuzufügen, Es ist normal, dass die Blackbox nach dem Drücken von F5 vorbeiflasht. Wenn Sie möchten, dass das Programm anhält, können Sie am Ende ein oder zwei getchar(); hinzufügen. Ich verstehe nicht, warum manchmal zwei verwendet werden. Fragen Sie Ihren C-Sprachlehrer; oder verwenden Sie system("pause"), fügen Sie Haltepunkte hinzu oder verwenden Sie das integrierte Terminal (externalConsole false) in launch.json. Wenn Sie darauf bestehen, ein externes Terminal zu verwenden, nichts tun und es nach dem Ausführen einfach anhalten möchten, kann VSC dies nicht tun, zumindest ist dies mit meiner Konfiguration nicht möglich, und ich möchte es nicht studieren Es liegt daran, dass ich das integrierte Terminal verwende.

preLaunchTask „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办不到,至少我的配置办不到,我也不想研究,因为我用内置终端。

  • 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", es bedeutet, dass etwas schief gelaufen ist und niemand den Grund sehen kann,

    Der Grund liegt im Bereich „Terminal“

    . 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 #include , dass die Datei „float.h“ nicht gefunden wurde. Nach dem Ändern in g++ ist dies in Ordnung. Ich denke, das sollte ein Fehler in der Bibliothek sein. Ich weiß jedenfalls nicht, wie ich ihn beheben kann. Oder versuchen Sie es nicht mit C++17 🎜B. So fügen Sie Umgebungsvariablen hinzu🎜🎜Grafisch: Klicken Sie mit der rechten Maustaste auf „Dieser PC“ und wählen Sie „Eigenschaften“ oder drücken Sie Win+PausePause. Wählen Sie links „Erweiterte Systemeinstellungen“, „Erweitert“ und „Umgebungsvariablen“ aus. Wählen Sie unter den oben genannten Elementen den Pfad aus, bearbeiten Sie ihn und erstellen Sie einen neuen. Geben Sie dann den Pfad zu dem Ordner ein, der die Ziel-Exe-Datei enthält. Wenn sich gcc beispielsweise in C: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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:zhihu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen