ホームページ  >  記事  >  開発ツール  >  VSCode を使用して C および C++ プログラムを作成して実行する方法

VSCode を使用して C および C++ プログラムを作成して実行する方法

青灯夜游
青灯夜游転載
2020-09-16 11:32:1010111ブラウズ

VSCode を使用して C および C++ プログラムを作成して実行する方法

関連する推奨事項: 「vscode 基本チュートリアル

## 0 . はじめに

この記事は初心者向けであり、各手順が詳しく説明されています。この記事を読んで、コマンド ライン、プログラムのコンパイルとデバッグ、VS Code の使用に関する知識を学びましょう。この記事が面倒だと思われる場合は、簡略化したバージョンを提供します。gcc および c/c 拡張機能をインストールし、フォルダーを開き、ソース コードを開くをクリックして F1 キーを押し、アクティブなファイルをビルドしてデバッグして完了です。

この記事の多くの内容は、公式 VS Code ドキュメント:

Visual Studio Code を使用した C プログラミング および各拡張機能のドキュメントから入手でき、これらも更新されます (この記事はメジャー アップデートも数回公開されています)。詳しく知りたい場合は、チェックしてください。この記事は基本的に何度も試みた結果ですので、間違いがあればご指摘ください。

最終効果: コンパイル段階でのエラー、コード スニペット、補完、フォーマット、単一ファイルのコンパイル、デバッグのリアルタイム表示。

1. 環境の準備

VSC の公式 Web サイト、ダウンロード、インストールについては詳しく説明しません。 VSC は単なるプレーン テキストの

editor(エディタ) であり、IDE (統合開発環境) ではありません。compiler(コンパイラ) やその他の多くの機能は含まれていないため、コンパイラはご自身で取り付けてください。

コンパイラをダウンロードします:

MinGW-w64 - 32 ビットおよび 64 ビット Windows 用 少し下にスクロールして、最新バージョンの x86_64-posix-seh を選択します。 最新バージョンのダウンロードは使用しないことをお勧めします。これはオンライン インストール パッケージです。国内の「ネットワーク環境」によってはダウンロードに失敗する場合があります。ブラウザがダウンロードに失敗した場合は、Thunder 経由でダウンロードするか、携帯電話のホットスポットに接続してみてください。それでも失敗する場合は、Google にアクセスできる方法を使用してください。 「インストール」コンパイラ: 7z 圧縮パッケージが提供されます。解凍方法がわからない場合は、Baidu で「圧縮パッケージの解凍方法」を検索してください。解凍後、簡単に削除されない場所に保管し、重なっているファイルの一部を削除してください。 bin フォルダーのフル パスについては楽観的であり、私の図では C:\mingw64\bin であり、それを環境変数の PATH に追加します。この手順の実行方法がわからない場合は、この記事の最後にある「B. 環境変数を追加する方法」を参照してください (このページでは Ctrl F で検索できます)

Debian Linux で使用する

sudo apt update; sudo apt install build-essential

で十分です。

VSCode を使用して C および C++ プログラムを作成して実行する方法
VSCode を使用して C および C++ プログラムを作成して実行する方法

##順序は重要ではありません。パスは異なっていてもかまいません。とにかく、gcc.exe がそのフォルダーにあることを確認してください。

検証
Win R を押し、cmd を実行し (この手順をスキップしないでください)、gcc と入力すると、「内部コマンドまたは外部コマンドではありません」または「gcc」ではなく、
入力ファイルがありません

というプロンプトが表示されます。 「項目はコマンドレット、関数、スクリプト ファイル、または実行可能プログラムの名前として認識できません。」 「内部コマンドでも外部コマンドでもない」ということは、gccが置かれているフォルダが環境変数のPathにないので追加する必要があることを意味します。追加後も問題が解決しない場合は、再起動してください。再起動してもダメな場合は、ご自身の操作に問題があると考えられます。

gcc -v と入力して、gcc のバージョンを表示します。表示されたバージョンがダウンロードしたばかりの

と異なるか古い場合は、Path に古いバージョンのコンパイラが存在し、別の IDE をインストールすることによってインストールされた可能性があることを意味します。 Path 内の元の gcc パスを削除する必要があります。

これら 2 つの検証は に準拠する必要があります。そうでない場合は、環境変数を変更する必要があります。 を誤って削除しないように注意してください。

VSCode を使用して C および C++ プログラムを作成して実行する方法
#ガタガタ音については心配しないでください。何か問題が発生します。 Clang チュートリアルはこの記事の最後に移動しました。
VSCode を使用して C および C++ プログラムを作成して実行する方法#gcc -v の出力の最後の行を入力します。バージョンは独自のものに対応する必要があります。たとえば、64 ビットには x86_64 と seh が必要です。
拡張機能のインストール

    C/C: cpptools とも呼ばれ、デバッグを提供します。フォーマット関数
  • コードランナー: 右クリックして単一のファイルをコンパイルして実行でき、非常に便利ですが、デバッグはできません
その他のオプションの拡張機能:

    ブラケット ペア カラーライザー 2: レインボー ブレース
  • One Dark Pro: おそらく VS Code のインストール数が最も多いテーマ
拡張機能のインストールは推奨されません/必須ではありません:

    GBKtoUTF8: GBK でエンコードされたドキュメントを UTF8 でエンコードされたドキュメントに変換します。この拡張機能は長い間更新されていないため、重大なバグがある可能性があります
  • C Intellisense: この記事の最初のバージョンで選択された gtag を使用します。この効果は非常に一般的です。
  • Include Autocomplete: ヘッダー ファイル名の補完を提供します。cpptools と vscode-clangd にはすでにこの機能があるため、インストールする必要はありません。
  • C/C スニペット: Snippets つまり、コードブロックを再利用すると、効果は自分でBaiduになります; この拡張機能はインストール量が多いですが、個人的にはあまり役に立たないと感じています cpptoolsとclangdにもいくつか付属しています; あなたはできます他のスニペット拡張子を選択することも、独自のスニペット拡張子を定義することもできます。

補足知識

    コンパイラはソース コードを実行可能ファイルに変換し、エディタはは入力するソフトウェアです。 Notepad はエディターであり、VSC もエディターです。
  • エディタはプログラムをコンパイルして実行することはできません。それはコンパイラの仕事であるためです。
  • MinGW は Windows での gcc のポートであり、gcc は Windows で最も一般的な C/C コンパイラの組み合わせです。世界 。ただし、gcc という名前は C 言語をコンパイルするプログラムも指し、g は C コンパイラです。つまり、gcc プログラムと g プログラムは、gcc スイートと MinGW に含まれます。gcc だけが言及される場合は、文脈に応じて区別する必要があります。
  • 実際には、MinGW と MinGW-w64 は似ています。名目上、これらは 2 つの異なるプロジェクトです。便宜上、この記事の MinGW は実際には MinGW-w64 を指します。 MinGW 自体は長い間更新されていないため、使用しないでくださいああ、MinGW は生きていることが判明しましたが、32 ビット プログラムしか作成できません
  • 拡張機能は拡張機能、プラグインはプラグインであり、VSC は以前の名前を使用します。ほとんどの記事ではこの 2 つが混合して使用されており、厳密ではありませんが理解できるものであり、主な矛盾を理解する方法を学ぶ必要があります。もちろん、この記事では正しいものが使用されています。 2. いくつかの .json ファイルを構成します
  • ワークスペース フォルダーと呼ばれる、コードを保存するフォルダーを作成します。
  • パスには中国語の文字と引用符を含めることはできません。私は C:\VS-Code-C
  • を使用します。仮想ワークスペースを使用しない場合、C と C はそれぞれ別のフォルダーを作成する必要があります。前項でコンパイラを格納したフォルダを選択せず​​、ソースコードとコンパイラは別に保管してください。

VSC を開き、

フォルダーを開くことを選択します

; 「ワークスペース フォルダーの追加」を選択しないことをお勧めします。これは仮想ワークスペースです。私は使用したことがないため、保証できません。大丈夫でしょう。クリックして、.vscode という名前の新しいフォルダーを作成します。リソース管理で新しいフォルダーを作成しない理由は、Windows エクスプローラーでは、作成されたフォルダーの最初の文字をドットにすることができないためです (1903 以降でサポートされています)。次に、launch.json、tasks.json、settings.json ( は settings.json ではありません) を作成し、

.vscode フォルダー

に配置します。レンダリング:

VSCode を使用して C および C++ プログラムを作成して実行する方法
これは .vscode 内にある必要があります。並列にしないでください。

これらのファイルの内容は次のとおりです。以下のコードをコピーすると、Zhihu がコードの前に「すべての権利は留保されています」という内容の行が自動的に追加されますので、実際に使用する場合は削除する必要があります。任意で変更できる箇所もあるので、コメントを参考に自分で調べてください。注: C で記述する場合は、tasks.json の一部を変更する必要があります。

launch.json コード

externalConsole は独自の設定に従って変更できます。cwd はプログラム実行時の相対パスで、# に変更できます。 ##${必要に応じて fileDirname} (ありがとう @xhx)。私は lldb を使用したことがないので、多くは言いません。タイプと色を変更しないように要求するのは正常です。

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

当初、2018年10月以降はexternalConsoleをfalseに設定することで内蔵ターミナルを使用できましたが、2019年10月にcpptools 0.26.1にバグが発生し、内蔵ターミナルを使用して中国語を入力できなくなりました。 Win 上の -in ターミナル。現時点では、0.29 .0 はまだ未解決です。開いてみました

https://github.com/microsoft/MIEngine/pull/1025修理に来ましたが、1か月経ってもレビューはなく、否定的なレビューでした。

tasks.json コード

が C で書かれている場合、コンパイラを g に変更する必要があります。追加の警告を表示したくない場合は、-Wall を削除してください。 one; -std 必要に応じて変更してください。ただし、c 17 には問題があるようです。せいぜい c 14 を使用するのが最善です。Linux では -fexec-charset を追加する必要はありません。とにかく、コメントを追加しましたが、それでも理解できません。Baidu gcc の使い方チュートリアルです。

reveal は、コンパイル中に端末パネルにジャンプするかどうかを制御します。好みに応じて変更できます。「なし」に設定されていても、自動的にジャンプすることはなく、手動でクリックすることで情報を表示できます。

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

settings.json コード

このファイルの内容を「ユーザー設定」に入れてグローバル設定をオーバーライドします。そうしないと、現在のワークスペースでのみ有効になります。これら 2 つの点にはそれぞれ独自の利点があります。

コード ランナーのコマンド ラインといくつかのオプションは、必要に応じてここで変更できます。カスタマイズしたい場合、またはその意味を知りたい場合は、この拡張機能のドキュメントと Baidu gcc の使用法を参照してください。チュートリアル。ターミナルで cmd (

Win7default) が使用されている場合は、それをコメント アウトするか、terminal.integrated.shell.windows を PowerShell に変更する必要があります。Win10 のデフォルトは PS なので、その必要はありません。変えられる。

@Wellin Boss にスニペットの提案を記載していただきありがとうございます。ただし、top の使用にはまだいくつかの問題があるため、オプションに変更されています。

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

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

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

c_cpp_properties.json

他の人のライブラリを使用する必要がないことが確実な場合は、現在のバージョン (0.18.0 以降)

このファイルを作成する必要はありません, cpptools デフォルト設定が自動的に使用されます。したがって、この記事にはこのファイルの構成は含まれなくなりました。

ヘッダー ファイルを自分で作成し、それが workspaceFolder の下にない場合、または他の人のライブラリを使用している場合は、このファイルを手動で作成し、

.vscode の下に置く必要があります。テンプレートについては、Microsoft/vscode-cpptools を参照してください。

過去の経験:

    ライブラリのパスを includePath とbrowseに追加する必要があります
  • 再帰的インクルージョンが必要な場合は、
  • /** を追加してください# 最後に ##。 この json ではコメントが許可されません。実際、json 標準によれば、コメントを含めることはできません。
  • コンパイラパスは、gcc に対して正確な、MinGW のフルパスでなければならないようです。 exe でない場合は、ヘッダー ファイルが見つからないというプロンプトが表示されます。Linux では、/usr/bin/gcc ですが、長い間テストしていません。
  • Windows でのディレクトリ区切り文字は次のとおりです。バックスラッシュ。本来はエスケープするために 2 つのバックスラッシュを使用する必要がありますが、スラッシュを直接使用します。ここでの Bang も
  • このファイルの構成に加えて、他の操作を実行する必要があります。その一部については、以下の「複数ファイルのコンパイル」を参照してください。
  • 補足知識

json はデータ交換形式であり、その大部分は のサブセットです。 JavaScript> ; これで、完全なサブセットになります。ここでは、

configuration

ファイルとして使用されます。 VSC とさまざまな拡張機能は、json 内のエントリを読み取り、特定の機能と動作を決定します。

これほど多くのエントリーはどこから来たのでしょうか?これは実際には API に似ています。拡張機能の開発者は、各拡張機能のインストール ページに記載されている、変更を許可するオプションを VSC に「指示」します。ユーザーとして、VSC は入力時に利用可能なものを表示するため、実際には非常に簡単に作成できます。

なぜこれほど多くのことを json に書き込む必要があるのでしょうか?なぜなら、VSC 自体は C 言語や他の多くの言語を特別に扱っていないからです。そして最も重要なコンパイル コマンドは VSC とは関係なく、上記のエディターとコンパイラーの問題です。 VSC は C 言語をコンパイルする責任を負いません、コンパイルできません。

$ で始まる変数は VSC 事前定義変数です。詳細については、「変数リファレンス」を参照してください。たとえば、$file は、実際の操作中に現在開いているファイル名に置き換えられます。

3. コードの作成、コンパイル、デバッグ

新しいファイルを作成した後にコードを作成できます。C 言語のソース コードの接尾辞は .c で、c は .cpp または .C または.cxx (これ、私にも教えてほしいですか...)。コード ファイルはワークスペースに保存できます。独自のフォルダーを作成できます。 を .vscode フォルダー に配置する必要はありませんが、 パス (ファイル名を含む) に中国語を含めることはできません文字と引用符 、できればスペースは含まないでください。主な理由は、多くのシンボルが有効なシェル構文であるためです。そうでない場合は、Linux で rm を使用して -rf というファイルを削除してみてください。確認しないと絶対に書けません。

Alt Shift F を押して (または右クリック メニューを使用して) コードを書式設定します。中かっこを新しい行で折り返すかどうかなど、書式設定方法を変更するには、次の情報を参照してください: Format C VSCode の同じ行に中かっこがある。 Intellisense が表示されたら タブを押してコードを完成させます。スニペットを入力すると、複数のジャンプ ポイントが表示されます。Tab キーを押して次のジャンプ ポイントにジャンプします。

短時間 (1 秒) 入力を停止すると、Lint が表示されます。拡張機能は、いくつかの示唆的な警告 (変数を宣言しているが使用していないなど) を表示します。自分で明確にしてください。 。不快に感じた場合は、プロンプトが表示されないようにする方法があります。たとえば、-Wall を削除するとプロンプトの数が減ります。さらに警告を削除したい場合は、次のことを思い出させてください: -Wno-....パラメータを見つけたら、#pragma GCC Diagnostics を使用するか、さまざまなフラグにパラメータを追加できます。とにかく、自分で調べてください。ただし、cpptools の Lint はフラグの設定をサポートしていないため、少し混乱します。フォロー: Error and Warning Flags? · Issue #2814 ·microsoft/vscode-cpptools

次に説明します。ランニングについて。まず、コンパイルとは、ソース コードから実行可能ファイルを生成するプロセスです。デバッグは実際には特別な種類の操作であり、プログラムの操作を制御し、その後の変更を容易にする手段です。これらは 2 つの異なる段階であり、コンパイルは成功してもデバッグが失敗する場合、コンパイルが直接失敗する場合、またはコンパイルが開始される前にコンパイルが失敗する場合があります。 「操作が失敗しました」とだけ言った場合、他の人は問題がどの段階にあるのかを判断できません。特定の段階を通過したと判断された場合は、その段階について心配する必要はなく、他の段階の問題を解決することに集中できます。

Ctrl Shift B を押してコンパイルするだけで、F5 を押してコンパイルとデバッグできます。当初は Ctrl F5 キーを押しても実行されますがデバッグはされませんでしたが、現在 cpptools はサポートしていませんが、デバッグは行われます。以下を参照してください:

サポート「デバッグなしで実行」 · 問題 #1201 · microsoft/vscode-cpptools

プログラム作成の初期段階では、

f5 を使用しないことを強くお勧めします。コンパイラ。一部のバグは警告を生成するだけでコンパイルを妨げないためですが、これらの問題は早期に解決されるほど良いでしょう。コンパイル情報は、下部の「ターミナル」パネルに表示されます。コードにエラーがある場合は、それをクリックしてコンパイラによって報告される情報を確認します。ただし、Lint のおかげで、一般的なエラーはすぐに発見され、修正されます。コードを書くのがずっと簡単になります。

ブレークポイントを追加するには、列番号の前をクリックするだけです。右クリックすると条件付きブレークポイントを追加できます。最初から停止したい場合はmain関数に追加するか、

launch.jsonに設定があります。デバッグを開始した後、f11 を押して段階的に進みます。矢印で示されたコード行は 次に実行されるコード です。f5 は次のブレークポイントまで実行されます。コード行を右クリックして、指定した行まで常に実行することを選択します。

左側にデバッグ バーがあり、変数の値が表示されます。自動バーがない場合は、手動で追加できます: コード内で監視する式を選択します。を押しながらクリックすると、ウォッチに直接追加するオプションがありますが、複雑です。手で押すだけです。変数上にマウスを置くと値が表示されますが、認識できるのは単純な式のみです。スタック フレームは再帰を観察するのに役立ちます。スタック オーバーフローやセグメンテーション フォールトが発生した場合、「例外」をキャプチャして間違った行に自動的にジャンプすることもできます。

特に配列の場合: C言語の配列は関数で渡されるとポインタに縮退してしまうため、式を直接追加すると最初の要素しか表示されません。この時点で、固定サイズの配列ポインターに強制的に変換してから逆参照することができます。たとえば、int arr[10] は、渡された後は int* arr になります。ウォッチで関数に *(int(*)[10])arr を追加すると、完全な配列が表示されます。ただし、長さは指定する必要があるので、線を越える場合は注意してください。または、単純なプログラムでは、グローバル変数配列を使用していつでもそれを確認できます。 gdb にのみ有効で void* ではない別の書き方: *arr@10

ショートカット キー: vscode: Visual Studio Code の一般的なショートカット キー - Zhiwen Studio。もちろん英語ドキュメントにはショートカットキーの説明もあり、Cheet Sheetも表示でき、英語ドキュメントも更新されます。これは初心者向けにのみ個別にリストされています。

エラーが発生した場合は、まず以下の「考えられるエラー」とコメント領域を読んでください。

コード ランナー

デバッグする必要がない場合は、直接右クリックしてコードの実行を選択するか、右上隅の再生ボタンをクリックします。ターミナルで実行するとデータの入力はできますが、時刻を表示する機能はなく、「出力」では上記2つの項目が逆になります。

ターミナルで Ctrl C を押してプログラムを終了します。次回実行する前に、現在のプログラムが終了していることを確認する必要があります (タスクについても同様です)。コピーする場合は内容を選択した状態で右クリック、貼り付ける場合は選択されていない状態で右クリック、この操作はWin10限定、ctrl cでもコピーできますが、プログラムが誤って終了する可能性があります。

ワークスペース以外でプログラムをコンパイルして実行するために使用することもできますが、executorMap がグローバル設定に配置されていない限り、デフォルトで gcc が使用されます。私の構成によれば、タスクとコードランナーの間には作業ディレクトリという違いが 1 つあります。前者は開いたフォルダー、後者はファイルが存在するフォルダーです。もちろん、自分で変更することも可能です。

実際のところ、コード ランナーはコマンド の手動入力を置き換えるだけであり、その機能は強力ではありません。さまざまなシナリオに適用できます。 Hello World を実行するためのコードを実行するのは簡単で、Code Runner は非常に強力で、以前の構成はすべて無駄であるとは考えないでください。

さらに、階下の回答者である Han Jun はこの拡張機能の作成者です。ご質問がある場合は、彼に連絡してください (面白い)。

複数ファイルのコンパイル

少量の複数ファイルのコンパイルを実行する場合は、C 言語を直接使用しますgcc ソース ファイル 1.c ソース ファイル 2.c ヘッダー ファイル1.hこれは良いことです。C は g を使用します。デフォルトでA.exeが生成されるので、-oを追加して出力ファイル名を指定し、残りのオプションは Baidu gcc の使い方チュートリアルです。複数回コンパイルする必要がある場合は、バッチ プロセスを作成できます。

複数のファイルのコンパイルを大量に実行したい場合は、makefile の作成方法を学ぶか、cmake を使用してください。次に、タスク コマンドを make (または mingw32-make) などを呼び出すように変更します。

ffmpeg などの他の人のライブラリを使用したい場合は、-I-l (小文字の L)、- を指定する必要がある場合があります。コマンド L 内。特定のパラメータについては、そのライブラリのドキュメントを参照してください。 Intellisense を構成するには、c_cpp_properties.json へのパスを追加する必要がある場合もあります。

このような場合は、別のワークスペースを構築し、それを単一ファイルのコンパイルで共有しないことを検討できます。実際、新しいプロジェクトを作成せずに 1 つのファイルだけをデバッグすることは、将来的に大規模な IDE を使用したり理解したりするのには役立ちません。ただし、初心者はそこまでマスターする必要はありません、プロジェクトのビルドが面倒だと思わないでください、プロジェクトをビルドしなくても十分にコンパイルできます。

要するに、これらは VSC とは関係ありません。他の IDE を使用する場合や、手動でコンパイルする場合も同様の問題が発生しますが、これも少し複雑です。この記事ではこれらについては詳しく説明しません。これらについては自分で解決します。

フォルダーを保存します

後でコードを記述するときは、以前に作成したフォルダーを開いて書き込む必要があります。そうしないと、すべての Intellisense が失われ、Code Runner のみが使用できるようになります。 。 (主にこれら 4 つの json が必要です。他のフォルダーを作成するには、これらの json をコピーする必要があります。)

ショートカットを作成し (右クリックして作成)、ワークスペースのパスをパラメータとして渡すことができます。VSC メイン プログラム必ず二重引用符を付けてください。アイコンを追加することもできます。 1.18 には実際の仮想ワークスペースがあり、1 つのウィンドウに複数のフォルダーをまとめて含めることができます。「ファイル」メニューに「ワークスペースを保存」機能もありますが、試したことがないので保証できません大丈夫だろう。

VSCode を使用して C および C++ プログラムを作成して実行する方法

一時ファイルのクリーンアップ

この構成によれば、間違いなくコードを長時間コンパイルすると大きな問題になります。exe の山が別のフォルダーに分散している場合もあります。

可以考虑修改一下json文件,把生成文件的目录指定到一个专门放exe的文件夹里;如果不会,百度gcc使用教程以及看我的json里的注释。或者资源管理器右上角搜索*.exe然后手动删除。

也可也写个bat,放到工作区里,要用的时候右键Run Code:

del %~dp0*.exe /q /s
del %~dp0tempCodeRunnerFile.c /q /s
del %~dp0a.out /q /s
del %~dp0*.o /q /s

其中%~dp0会被替换成该批处理所在目录,这是为了防止有同学选错工作目录,误删根目录下的文件;code runner的设置我也调整成了先切换到文件目录,双保险。

添加纯英文输入法

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

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

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

某些可能出现的错误

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

4. 其他设置

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

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

作者:谭九鼎
链接:https://www.zhihu.com/question/30315894/answer/154979413
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

"editor.fontFamily": "等距更纱黑体 SC", // 控制编辑器字体
"editor.fontSize": 16, // 同上
"editor.fontLigatures": true, // 连体字,效果不太好形容,见 https://typeof.net/Iosevka 最后一部分
"editor.minimap.enabled": false, // 我个人不用minimap,就是右边那个东西
"editor.dragAndDrop": false, // 选中文字后,可以拖动它们调整位置。我是不需要
"editor.cursorSmoothCaretAnimation": true, // 移动光标时变得平滑
"editor.smoothScrolling": true, // 滚动平滑,不过效果很微弱
 
"files.trimTrailingWhitespace": true, // 保存时,删除每一行末尾的空格
"files.insertFinalNewline": true, // 保存后文件最末尾加一整行空行,Linux下的习惯
"files.autoGuessEncoding": false, // 启用后,会在打开文件时尝试猜测字符集编码。我关闭的理由见6,默认也是禁用的

"workbench.colorTheme": "One Dark Pro", // 主题
"workbench.colorCustomizations": {
      "activityBar.foreground": "#39C5BB" // 自定义颜色;想定义其它位置参见官方文档
},
"workbench.settings.useSplitJSON": true, // 恢复手动编辑时的两列设置
"window.zoomLevel": 0.2, // 整体放大

"git.enabled": false, // 如果你不用git,可以考虑关闭它
"git.ignoreMissingGitWarning": true, // 同上

"[c]": {
    // "files.encoding": "gbk" // 这样的格式可以对指定后缀的文件应用设置,如果你实在想用gbk,就这样设置吧。cpp同理。
},

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

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

6. 关于中文和乱码

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

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

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

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

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

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

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

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

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

7. ヘッダー ファイルが見つからないエラー

VSCode を使用して C および C++ プログラムを作成して実行する方法

##gcc がパスにありません。戻って上記の検証手順を見てください。
  • C_cpp_properties.json は手動で構成されており、含まれているパスが間違っていました。このファイルをまだ作成していない場合でも、心配する必要はありません。
  • 再起動して試してください。
  • これらの点が要件を満たしていることを確認できれば、何も問題はありません。アイデア...または別の答えを教えてくださいマスターのチュートリアル。この文は究極のフォールバックであることに注意してください。間違いを犯していないと確信できる場合は、私に質問する必要はありません。私には解決できません。

ヘッダー ファイルが見つからないという別のエラー:

VSCode を使用して C および C++ プログラムを作成して実行する方法

この状況は、 Clang のデフォルトのターゲットは msvc であるため、
--target=x86_64-w64-mingw

パラメータを追加する必要があります。 このデフォルトのターゲットはソース コードにハードコーディングされています。調べてみましたが、これを変更する通常の方法が見つかりませんでした。 Clang のソースコードをダウンロードして自分で変更し、Clang 自体をコンパイルすれば解決できるかもしれません。または、mingw を使用する代わりに Windows SDK をインストールします。これにより、デフォルトのターゲットに準拠します。

もちろん、現時点で最も簡単な方法は、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 をインストールして、MinGW を必要としない Windows SDK を使用することも選択できます。これはより公式ですが、規模が大きくなります。

  • Q: MSVC 統合のインストールに失敗しました / Visual Studio のインストールが見つかりません...
  • A: 前の理由です。Clang はデフォルトで MSVC バックエンドを使用します。ただし、この部分では MinGW を使用するため、このプロンプトについて心配する必要はありません。それ以外の場合は、Windows SDK をインストールします。

環境

    LLVM ダウンロード ページ
  • : このページで Clang をダウンロードします。ビルド済みバイナリで Windows (64 ビット) を選択します。.sig ファイルをダウンロードする必要はありませんvscode-clangd: Intellisense および Lint 機能を提供します。ウェアハウスと使用法については、次を参照してください:
  • Clangd/clangd
  • C/C Clang コマンド アダプター: この記事では以前に使用しました。vscode-clangd に問題がある場合は、これに変更することを検討してください。構成は少し異なります。
  • Clang-Format: 中括弧を付けるかどうかなど、コード スタイルをカスタマイズする場合にのみインストールします。改行。
  • CodeLLDB (lldb の vscode 拡張機能) の使用方法をさらに学習する必要があります。これには Python 環境が必要です。私はこれを使用したことがありません。
Configuration

コンパイル コマンドに
    --target=x86_64-w64-mingw
  • を追加します。 Clang のデフォルトのターゲットは msvc です。これを追加しない場合、ヘッダー ファイル
  • C_Cpp.errorSquiggles
  • C_Cpp.autocompleteC_Cpp。 assignSnippets は見つかりません。オフにすると、clangd

compile_flags.txt によって報告されるように繰り返されます。 ##実際には、これらのコンパイル オプションを設定するためのもので、基本的には -Wall と --target=x86_64-w64-mingw を使用するだけです。 Clangd は、評価対象のファイルに最も近いcompile_flags.txtのみを使用します。 --target が存在することを確認する必要があるため、フォールバック用にワークスペース ディスク上にルート ディレクトリを作成することをお勧めします。

しかし、さらに混乱するのは、C と C の両方がヘッダー ファイルとして .h を使用することです。std を追加しない場合、.c と .cpp は正しく lint できますが、.h は C モードを使用します。フォールバックに対する適切な解決策はないようです。繰り返しますが、Windows SDK をインストールするだけです。

13. コードを書いた私の経験

サイズの点では、オントロジー コンパイラ拡張機能は、C を書くためだけに使用する場合、ハードディスク占有量は最大 1G まで小さくありません。メモリ使用量はまだ比較的少ない (約 0.5g); メモリを大量に使用するバグがありましたが、もちろんずっと前に修正されています。

VSC の最初の利点は、見た目が良いことではないでしょうか? C/C 用に特別に設計されたものではありませんが、現時点では最も最新のプレーン テキスト エディターとなるはずです。また、dev c 自体の Debug 関数にはバグがあることは言うまでもなく、Lint だけでも wintc、cfree、dev c よりもはるかに優れています。

他の IDE である CodeBlocks はまだ生きていますが、歴史的な重荷は非常に明らかです。 Clion は美しいインターフェイスと強力な機能を備えていますが、英語のみなので少しとっつきにくいかもしれません。学生は無料でキーを申請できますが、それ以外の場合は有料です。 Windows SDKを使いたい場合は、次にVisual Studio(インストーラー)、Cデスクトップ開発用のコミュニティ版にチェックを入れると、ClangのデフォルトのTargetに準拠しますが、VSを直接使った方が良いと思います。一部の C IDE に対する他の回答者の評価については、この回答を読むことができます: 私は C 言語を学習しようとしているプログラミングの基礎のない初心者です。VC6 または VS2015 を使用する必要がありますか?

私も学生の皆さんに言いたいのですが、Baidu でこの記事を読み、それを理解して自分で設定できるのであれば、あなたはすでに Tieba に連絡して待っている無数の人々よりも優れています。教師が QQ グループに IDE を配布するのは非常に強力です。能力がある場合は、VSC ドキュメントを読むことをお勧めします: Documentation for Visual Studio Code. それは複雑ではありません. 英語の実践的な応用を経験することも良いことです.

A. その他の考えられるエラー

  • ブレークポイントを追加せずに hello world のみを記述すると、f5 キーを押した後にブラック ボックスがフラッシュ パス/フラッシュバックします。これは通常の現象です。 。プログラムを一時停止したい場合は、最後に 1 つまたは 2 つの getchar(); を追加します。なぜ 2 つ使用される場合があるのか​​わかりません。 C 言語の先生に問い合わせるか、system("pause") を使用するか、ブレークポイントを追加するか、launch.json の組み込みターミナル (externalConsole false) を使用してください。外部端末を使用することに固執して何もせず、実行後に一時停止したい場合は、少なくとも私の構成では VSC ではそれができません。私はそれを勉強したくありません。内蔵端子。
  • 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 では、ウォッチ ウィンドウで strcmp を使用すると、gdb がクラッシュし、不明な理由で終了します。 Linux では正常です。
  • ファイルの名前を変更した後も、既存の Lint は問題の列に残ります。ファイルを変更するとブレークポイントが無効になる可能性があります。他にもこのような小さなバグがいくつかありますが、通常は VSC を閉じて再度開きます。
  • bash ではバックスラッシュが改行として認識されるため、この構成は Bash for Windows または WSL では使用できません。 cpptools は、launch.json の
  • Bash on Windows Launch スニペットを提供するようになりました。現在、別のリモート WSL が存在します。しかし、私はこれらのどれも試したことはありません。
  • デバッグしたい場合は、最適化をオンにしないでください。 Gcc は、-Og を使用することで一部のデバッグ情報を保持できますが、clang を使用すると、gdb をデバッグに使用できなくなります。それでも、コードを書いているときに関数にジャンプできないという問題に遭遇しましたが、VS では関数にジャンプできました。
  • vscode-clangd は、最初は printf、scanf、realloc を正しく検出できませんでしたが、コード内で 1 回使用した後は改善されました。理由は私にも分かりません。
  • 現時点では & は存在しないはずです。コメントアウトした 2 つのコマンドを使用するには、ターミナルで PowerShell またはコード ランナーの executorMap を使用します。詳細については、上記の settings.json の説明を参照してください。
  • crt0_c.c:(.text.startup 0x2e): `WinMain' への未定義の参照: main 関数がないか、main が main として記述されています。
  • Win で Clang mingw を使用すると、 #include を実行すると、「float.h」ファイルが見つからないと報告されます。これを g に変更すると問題なく動作します。これはライブラリのバグだと思うのですが、解決方法がわかりません。または、C 17 を使用せず、
B. 環境変数を追加する方法

グラフィカルな方法: [このコンピュータ] を右クリックしてプロパティを選択するか、win PauseBreak を押します。左側で「システムの詳細設定」、「詳細設定」、「環境変数」を選択します。上記項目の中からPathを選択し、編集し、新規作成します。次に、ターゲットの exe が含まれるフォルダーへのパスを入力します。たとえば、gcc が

C:\mingw\bin\gcc にある場合は、C:\mingw\bin と入力します。Win では大文字と小文字が区別されません。

コマンドラインによる方法: cmd または PS を開き、

setx /m path "%path%;C:\mingw\bin\" を実行します。このコマンドは管理者権限を必要とせず、端末が終了しても終了しません (上記と同じグラフィック効果があります)。

それでも変更方法がわからない場合は、Baidu または Bilibili で「環境変数」を検索し、ビデオをご覧ください。ほとんどは C ではありませんが、大きな違いはありません。

に注意し、誤って を削除しないようにしてください。


質問がある場合は、ディスカッション用にメッセージを残すことができますが、詳しく説明することが最善です。 もう一度言いますが、「preLaunchTask はコード 1 で終了しました」という文だけを教えてはいけません。この文は役に立たない。

プログラミング関連の知識について詳しくは、

プログラミング入門をご覧ください。 !

以上がVSCode を使用して C および C++ プログラムを作成して実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はzhihu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。