Visual Studio CodeでC言語プログラミングを始める(Windows編)

Visual Studio CodeのロゴC言語初級
スポンサーリンク

Python全盛の今ですが、C言語を学び始める方も多いのではないかという管理人の勝手な憶測のもと、WindowsのVisual Studio CodeでC言語プログラミングを始めるベストな方法をご紹介します。端的に言うと再生ボタンを押してgccコンパイル&実行の環境が欲しい方向けの記事です。
※初心者向けに手取り足取り説明しています。(たぶん)

この下にある目次を見ると非常に長くて「げげっ」っと思うかもしれませんが、初めての方でも迷わないように詳細に解説しましたので、ぜひ頑張ってみてください。

スポンサーリンク

インストールが必要になるソフト

まずは何を自分のパソコンにインストールすべきか?という部分からお話しします。

1.C言語コンパイラ(gccコンパイラ)
2.エディタ(Visual Studio Code)

この2点です。
早速インストールしましょう。

WindowsパソコンならCコンパイラさえインストールすれば、あとはメモ帳でプログラムを書いてコマンドプロンプト上でコンパイル(プログラムを実行形式ファイルにすること)すれば作ったプログラムを実行することができます。しかし、メモ帳では行番号表示や入力支援機能がない、コマンドプロンプトでのコンパイルではメモ帳⇔コマンドプロンプト間の切り替えが何度も発生するので煩わしい、など慣れてくると面倒に感じます。
Visual Studio Codeを使えば1つの画面でプログラム作成+コンパイル+実行が可能です
大規模な統合開発環境としてVisual Studioというものもあるのですが、ソフトの起動も重いし、ちょっと気軽にプログラミングといった感じではなくなるので、Visual Studio Codeがおすすめです。Visual Studio Codeを使えば雑用が減ってプログラミングそのものに集中できる、と言いかえることもできます。

C言語コンパイラをインストールする

実はC言語コンパイラにも色々な種類があります。ここは代表的なCコンパイラであり、フリーで一番導入が簡単なgccコンパイラを使います。

導入が簡単と言いましたが、初心者には語弊があるかもしれません。《他のコンパイラと比較して》gccコンパイラは導入が簡単という意味です。導入には面倒な作業があるかとは思いますが、以下の手順通りに済ませれば大丈夫です。頑張りましょう!

詳しい手順は以下のリンクから説明しています。リンク先で解説しているダウンロードインストール利用するための設定を済ませてください。

エディタ(Visual Studio Code)をインストールする

すでにお使いのパソコンにVisual Studio Codeがインストールされている方は本項目を飛ばしてください。

Pythonプログラミングを始めるために書いた記事へのリンクで恐縮なのですが、ほぼ途中まで同じ内容ですので、以下を参考にVisual Studio Codeをお使いのパソコンにインストールしてください。
ただし、以下記事を全て実践する必要はありません。記事内のJapanese Language Pack for Visual Studio Codeの追加の部分まで済んだらこの記事に戻ってきてください。(それ以降はPythonに関しての設定なので…)

※以降この記事でのVisual Studio Codeの呼称は、VsCodeと略します。

C言語プログラミングを楽にするための設定

C/C++機能拡張を導入する

まずは、VsCodeにC言語の予約語や関数名などの予測候補文字列を表示してプログラミングを楽にしてくれるC/C++という機能拡張を導入します。

VsCodeを起動します。
左側の機能拡張ボタンをクリックします。

検索ボックスに「c」と入力すると、C/C++という名前の機能拡張が表示されると思います。(似たような名称が出ますが、Microsoftと表示されていれば大丈夫です)
インストールボタンをクリックしてください。

ボタンがアンインストールの表示に切り替わり、「この機能拡張はグローバルに有効化されています」と表示されていれば機能拡張C/C++のインストールは完了しています。

VsCodeに機能拡張Code Runnerをインストールする

C言語プログラムはそのままでは実行できないので、コンパイルという作業が必要になります。
Windowsのコマンドプロンプト上でこれをしようとすると以下のような文字列を打ち込んでEnterキーを押す必要があります。

例)test.c というCプログラムをコンパイルする場合

gcc -o test test.c

結構これ面倒です。
再生ボタンを押せば、コンパイル&実行を一度にやってくれるVsCodeの機能拡張 Code Runner をVsCodeにインストールして楽をしましょう。

機能拡張ボタンをクリックして検索ボックスに「code runner」と入力して検索します。
表示されたらインストールをクリックします。

Code Runnerの設定を行う

この項目の設定はWindowsをお使いの場合の設定です。もしLinuxやMacOSをお使いであれば必要ありませんので、次の「Code Runnerのターミナル設定を変更する」に進んでください。

Code Runnerのインストールが完了するとインストールボタンが歯車に変わります。
歯車ボタンをクリックするとメニューが表示されるので、「機能拡張の設定」項目を選択します。

Code Runnerの設定が表示されます。
表示された中から「Executor Map」という項目を探し出し、settings.json で編集 の部分をクリックします。

VsCodeの設定ファイル(settings.json)が開きます。

表示されたファイルは、settings.jsonというVsCodeの設定ファイルです。万が一 settings.json の内容を間違って書き換えたりするとVsCode自体が不安定になるため注意して進めてください。

“code-runner.executorMap”: { と書かれた場所を探してください。

この前後に文字列を追加していきます。2箇所あります。

まずは“code-runner.executorMap”: { と書かれた手前に以下の文字列を追加します。

"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",

次に“code-runner.executorMap”: { と書かれた場所の下の方にある次の行を探してください。

"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

文字列「gcc」の後に「-fexec-charset=CP932」という文字列を追加します。
-fexec-charset=CP932」の前後には、半角スペースを必ず入れてください。(重要

文字列追加後の“code-runner.executorMap”: {の前後の状態は以下のようになります。(青い文字が追加した部分)

                        : 
   "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
    "code-runner.executorMap": {

        "javascript": "node",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "cd $dir && gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
                        : 
                        : 

settings.jsonファイルをCtrl+ S上書き保存します。
まだうまくいっているか分からないので、すぐにsettings.jsonのタブは閉じずそのままにしておきます。

ちなみに上記設定の

"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",

の部分は、Code Runnerを使うときにVsCode規定のPowerShellを使わずに、cmd(コマンドプロンプト)を利用するための設定です。PowerShellだとCode Runneでのコンパイルがうまく行かないため強制的に変更しています。

2021.05.10追記
この設定はVsCodeの最新バージョンでは非推奨らしくターミナルで実行時に問題として表示されてしまいます。ただ他の設定方法が分からないためこうしています。
どなたか他にいい方法をご存じでしたら教えて下さい。

また、

-fexec-charset=CP932

の部分は、WindowsでC言語プログラム実行時に文字コードをShift JISで出力するための設定です。詳しく知りたい方は、こちらを参考にしてください。

Code Runnerのターミナル設定を変更する

先ほど表示した設定ウインドウが残っていると思います。設定ウインドウをクリックしてアクティブにします。(設定ウインドウを閉じてしまった場合は、Ctrl + ,(カンマ)で再表示できます)

設定ウインドウを下にスクロールして Run In Terminal という項目を探してください。
初期状態では Run In Terminal の項目にチェックが入っていません。クリックしてチェックを入れてください

Code Runnerのデフォルトではプログラム実行時に読み取り専用エディターなるものが開いてしまいC言語で作ったキーボードから入力させるプログラムなどは実行できません。上記は、それを回避するための設定となります。(具体的に言うと、VsCodeでのC言語プログラムの実行をCode Runnerデフォルトの読み取り専用エディターからWindowsのコマンドプロンプトに変更する設定です)

Code Runnerの設定は以上です。

既定のシェルをcmd(コマンドプロンプト)に設定する

【2021-05-10 管理人より】
この項目は古くなったため削除しました。次の「VsCode環境でのC言語プログラム作成から実行までの流れ」に進んで下さい。
VsCodeはどんどん進化するので記事が追い付かなくなりますね!
VsCodeのApril 2021 (version 1.56)のリリースよりこの項目の設定はできなくなりました。
どうやらマイクロソフトはどうしてもPowerShellを規定のシェルとして使ってほしいようです。

C言語をコンパイルしたり実行したりするには通常ターミナルを用います。

ターミナルはコマンドラインといって命令をキーボードなどから入力してEnterキーで実行するような環境のことです。Windowsでは、cmd(コマンドプロンプト)やPS(PowerShell)、LinuxやMacOSではTerminal(ターミナル)というアプリが一般的です。

WindowsのVsCodeの場合、このターミナル設定(既定のシェル)がデフォルトでPowerShellとなっています。gccでコンパイルする際、PowerShellだと色々と不具合があるため、これを従来からのcmd(コマンドプロンプト)に変更しておきます。

まずVsCodeで何もタブを開いていない状態にします。

キーボードから Ctrl + @ を押してターミナルを表示させます。

PowerShellの場合は、Windows PowerShell… などと表示されているはずです。

ターミナルウインドウの 1:powershell となっている部分をクリックして既定のシェルの選択を選びます。

画面上部に表示される選択肢の中から Command Prompt を選択します。

一旦削除ボタンをクリックしてターミナルを閉じます。

キーボードから Ctrl + @ を押して再度ターミナルを表示して確認します。

ターミナルに Microsoft Windows [Version 10.0.19042.804] …(バージョン番号は環境により異なります)などと表示されていれば既定のシェルがコマンドプロンプトに切り替わっています。

VsCode環境でのC言語プログラム作成から実行までの流れ

ようやくC言語プログラミングを利用できる環境が整いました。(ここからが開始です!)
早速、C言語プログラムを作って実行させてみましょう!…といっても少々準備が必要です。

C言語プログラムを格納するためのフォルダの準備と設定

まずはC言語プログラムを保存するためのフォルダを作ってください。
今回は例としてWindowsのドキュメントフォルダにgccという名前のフォルダを作りました。(お好きな場所に適当な名前のフォルダを作ってください)

フォルダを作らなくてもVsCodeでパソコンの色々な場所にあるC言語プログラムファイルを読み込んで実行することは可能です。しかし、C言語プログラムの保存場所がばらばらだと自身での管理が面倒になってきます。他のプログラミング言語にも言えますが、PythonならPythonプログラム保存用のフォルダ、C言語ならCプログラム保存用のフォルダなどとフォルダ分けして管理した方が、パソコンのファイルを整理整頓できますし、VsCode上でCプログラムをいちいち探す必要がなく楽です。

次に先ほどC言語プログラム用に作成したフォルダをVsCodeに登録します。
メニューから ファイル > フォルダーをワークスペースに追加… を選択してください。

VsCodeで管理したいC言語ソースコード格納用フォルダを選択して追加ボタンをクリックします。(下の画面では例としてドキュメントフォルダのgccフォルダを登録しています)

追加したフォルダは、VsCodeのウインドウ左側に表示されます。

フォルダの準備と設定は以上です。

C言語プログラムを作ってみる

動作確認の意味も込めて、VsCode上でC言語プログラムを作成してみます。
最初のCプログラムは画面に文字が表示されるプログラムです。

hello.c

/* 画面に何か表示するプログラム */
#include <stdio.h>
int main(void)
{
	printf("C言語は習うより慣れよ\n");
	return 0;
}

実行イメージ

C言語は習うより慣れよ

通常はこうした最初の動作確認プログラムに printf(“Hello, world!\n”); (5行目)のような半角英字を用いることが多いのですが、あえてマルチバイト文字の日本語を使って printf(“C言語は習うより慣れよ\n”); という文字列にしました。理由は、先ほどのVsCodeの設定がうまくいっているか確認するためです。もし実行結果で文字化けしているようであれば、C言語プログラミングを楽にするための設定の部分を見直してください。

先ほど追加したフォルダ上で 右クリック > 新しいファイル を選択します。

C言語のプログラムは拡張子が.cとなります。今回はファイル名を「hello.c」としました。

ファイルを作成すると右のエディターウインドウにカーソルが点滅し入力可能となります。
1と行番号が表示されています。先ほどのCプログラム hello.c を入力してみてください。

入力後のイメージ

プログラム入力の注意点

・「画面に何か表示するプログラム」と「C言語は習うより慣れよ」の部分は、全角文字です。それ以外は全て半角文字となります。プログラムは基本が半角文字であると考えてください。
5行目と6行目の空欄部分はスペースを沢山入力せずに、TABキーを1回入力して空欄を入力しますこれを字下げと呼んでいます。
・5行目の「/n」という部分は、キーボードから半角文字で「¥n」と入力してください。
・3行目の intmainの間、6行目の return0の間にはそれぞれ半角スペースを入れてください。

プログラムを上書き保存する

VsCodeでは未保存の項目はファイル名の横に●がつきます。
また左側のファイルアイコンには、未保存のファイル数が表示されるようになっています。

次の手順に移る前にキーボードの Ctrl + S でプログラムファイルを上書き保存しておきます。

プログラムのコンパイルと実行

通常、作成したCプログラムは、

1.コンパイル
2.実行

といった手順で実行確認をします。プログラムをいきなり実行できるわけではなく、プログラムをコンパイルして実行形式のファイルを作ってから実行となるわけです。
VsCodeと機能拡張の Code Runner をインストールした環境であればこれを再生ボタン1つで済ませることができます。(今回の開発環境で一番楽ができる部分がまさにここです!)

VsCodeの右上にある再生ボタンをクリックします。

VsCode下にターミナルウインドウが表示され自動的にコンパイル+実行結果を出力してくれます。

hello.cのVsCodeでの実行イメージ

ターミナルにコンパイルエラーが表示された場合

先ほどの例はコンパイルが問題なく終了した例ですが、もしプログラムに入力ミスや間違いなどがあると以下のような形でターミナルウインドウにコンパイルエラーが出力されます。

エラーメッセージが出ると何か悪い事をしでかしてしまったような気になりますが、気にしないでください。エラーメッセージはプログラミングを上達させる手助けをしてくれます。

エラーメッセージ部分をよく見て下さい。
上記の例だと以下の部分が重要です。

hello.c:5:45: error: expected ‘;’ before ‘return’

hello.c はファイル名です。その後に続く 5:45 の数値は、「5行目の45文字目あたりが怪しいよ」といったエラーメッセージになります。もっともこのエラーメッセージの場合その後の error: に続く expected ‘;’ before ‘return’ の記述で ‘;’ が含まれているので、C言語特有の命令の最後に ; (セミコロン)を付け忘れているのかな、と予想がつきます。

ちなみにプログラムにエラーが見つかって修正する作業の事を デバッグ といいます。

【重要】コンパイルエラーに対する心構え

大事な点なので、もう少しデバッグ作業コンパイルエラーについてお話しておきます。

初心者がプログラミングで一番時間を費やす部分がデバッグ作業だったりします。管理人は初心者ではないですが、いまだにデバッグに時間が掛かります。(じゃあ、初心者じゃん!などと言わないでください)

コンパイルエラーの英語のメッセージを読みたくないという人も多いと思います。
その場合は、コンパイルエラー時のファイル名に続く行番号部分に注目してください。先ほどの例で言えば、hello.c:5:45 のような部分。

エラーが起きている行数が分かれば、まずはその行にエラーがないかチェックします。その行になければ1つ上の行をチェックします。プログラムは上から下に流れるので、エラーが起きている行数かその行より上をチェックするようにします。大抵のエラーは、エラーが起きている行かその1つ上の行で問題があるからです。

そしてコンパイルエラーの多くは入力ミスです。自分では正しいと思って入力しているので、見逃しがちなのです。入力ミスは、エディターに指定したフォントが原因になる事もあります。例えば、大文字のアイと小文字のエルが同じく見えてしまうようなフォントを使っていると入力ミスに気が付きません。(ちなみにWindowsだとメイリオMonacoあたりがおすすめです)

学生の作ったプログラムを見ていると全角文字をプログラム中に入力してしまいコンパイルエラーとなっていることも多いです。コメント文の中やprintf関数の の後に全角文字を入力後、そのまま全角で入力を続けてしまっている例がありました。

わたしはプログラミングで挫折する一番の原因はデバッグ作業でプログラミング嫌いになることだと思っています
自分の入力ミスに自分で気づけるようになれば自然とプログラミングは上達していきます

まとめておきます。

コンパイルエラーに対する心構え

1.エラーが出た行、またはその上方の行に間違いがある
2.エラーは自分の入力ミスがほとんど
3.アルファベットが区別しやすいフォント設定にしてあるか?
4.変な場所に全角文字がまぎれていないか?

以上、長々とおつきあい頂きありがとうございました。
WindowsのVisual Studio CodeでC言語プログラミングを始めるベストな方法を終わります。

プログラミングは、《 習うより 慣れよ 》です!

Amazonで「C言語」の本を検索 >>

スポンサーリンク
C言語初級
スポンサーリンク
dennouをフォローする
電脳産物

コメント

  1. a より:

    質問失礼します。visual-studio-codeでc言語プログラミングを始める(windows編)というページで、C言語プログラム実行時の文字化け対策を行った(文字列「gcc」の後に「-fexec-charset=CP932」という文字列を追加)のですが、再生ボタンを押した時に日本語が文字化けしてしまいます。この時どのような対策を講じればよいでしょうか?

    • dennou より:

      a さん、こんばんは。管理人です。
      文字化けの件で一度確認をお願いしたいのですが、次のようなプログラムを実行した場合は実行ができますでしょうか?

      #include <stdio.h>
      int main(void)
      {
          printf("Hello!\n");
          return 0;
      }

      上記プログラムで「Hello!」と表示されたら、次のプログラムではどうでしょうか?

      #include <stdio.h>
      int main(void)
      {
          printf("C言語は習うより慣れよ\n");
          return 0;
      }

      実行した際、「C言語は習うより慣れよ」と表示されずに「C����͏K����芵���」のような感じで文字化けしていたら、同記事の4.4の項目「Code Runnerのターミナル設定を変更する」の設定を見直してみてください。

      この設定がされていないとコンパイル&実行はできますが、文字化けして表示されてしまいます。

  2. a より:

    管理人さん、返答ありがとうございます。記事の4.3と4.4の項目を見直してみたのですが改善しませんでした。「Hello!」と出力はできますが「C����͏K����芵���」と出力されます。

    以下はターミナルの出力結果です。
    owner@PC:~/suport/C$ cd “/home/owner/suport/C/” && gcc -fexec-charset=CP932 start.c -o start && “/home/owner/suport/C/”start
    C����͏K����芵���

  3. a より:

    管理人さん、前にした質問ですが、setting.jsonの「“code-runner.executorMap”:」を削除すると文字化けが解消しました。回答していただきありがとうございました!

    • dennou より:

      a さんこんにちは。
      管理人です。うまく動作したようでまずは良かったです!

      送って頂いたターミナルの出力結果から察するにお使いのOS環境はWindowsではなくLinux環境でしょうか?
      LinuxやMacOSであれば、Code Runnerの設定で「-fexec-charset=CP932」を追加する必要はなくなります。

      そもそも「-fexec-charset=CP932」はWindows環境でデフォルトの文字コードであるShift-JISで実行するためのコンパイルスイッチだったので、Windows以外の環境であれば大抵文字コードがUTF-8で処理されているので、「-fexec-charset=CP932」を追加する必要がなくなります。

      ともあれ良かったですね。

  4. VS君 より:

    エディタ類を使用するは初めてです。
    例題を実行してみたのですがいくつか疑問が生じてしまいました。
    質問させてください。

    疑問(1)ターミナル欄が実行前は1:PowerShell、実行後は2:Codeに変化するがこれはなに?
    疑問(2)printfの引数に\nを入れているのですが実行結果は改行されず(\入力したがリストは逆スラッシュになってしまう)
    疑問(3)実行結果の前に出ているメッセージ中のif($?)はなに?

    以下が実行結果の画面をコピペしたものです。

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.

    新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

    PS C:\Users\****\Documents\gcc> cd “c:\Users\****\Documents\gcc\” ; if ($?) { gcc -fexec-charset=CP932 kanji.c -o kanji } ; if ($?) { .\kanji }
    C言語は習うより慣れよ
    PS C:\Users\****\Documents\gcc>

    以上よろしくお願いいたします。

    • dennou より:

      VS君さん(「君」に「さん」をつけるのも変か!)こんばんは。管理人です。

      わたしはC言語環境を入れる前からVisual Studio Codeを使っていたので、すんなり出来ていましたが、もしかすると「既定のシェル」の設定を自分で変えていたのかもしれません。
      どうやらVisual Studio Codeは既定のシェルがPS(Windows Power Shell)というものになっているらしく、
      今回のC言語環境では既定のシェルをcmd(コマンドプロンプト)にしておく必要があるようです。

      VS君さんからいただいた疑問(1)~(3)は全て既定のシェルをcmdに変更することで解決するはずです。

      変更方法を動画でアップしましたので既定のシェルを変更してみてください。(動画ではあえてVS君さんと同じエラーメッセージを出した状態から変更しています)

      動画URL(既定のシェルを変更する方法)
      https://youtu.be/qKf_oqvX164

      Visual Studio Codeは、最初に使うエディタとしては、手ごわいソフトです。
      でも使いこなせるときっと大きな力になるはずです。

      • VS君 より:

        管理人様

        ご丁寧に動画までアップしていただきありがとうございます。

        早速その通りcmdにしたところ問題の現象が解消しました。
        あっけない結果でしたが、奥が深そうで私には理解不能です。
        とは言え、これでgccを使える環境が整いました。

        >>Visual Studio Codeは、最初に使うエディタとしては、手ごわいソフトです。

        もっと簡素で、ソースを実行できるエディタってないんですかね。

        • dennou より:

          解消できて良かったです。
          WindowsのPS(パワーシェル)は、cmd(コマンドプロンプト)の後継なのですが、使える命令が微妙に違うので、こういったことが起こりがちです。
          Microsoftは、ユーザにPSの方を使わせたい感じですね。

          >> もっと簡素で、ソースを実行できるエディタってないんですかね。

          一番簡単なエディタはWindows標準に添付のNotepad(メモ帳)かも。

          メモ帳でC言語のプログラムを保存して、コマンドプロンプト上でgccでコンパイルして実行、といった手順でも十分C言語プログラミングができます。
          最近は、Visual Studio Codeをよく利用しますが、それまでは秀丸というシェアウエアのエディタを愛用していました。(というか今もしている)

  5. VS君 より:

    サポートありがとうございました。
    とても勉強になりました。

    並行作業でTeraPadというエディタを触ってみました。
    私にはこれくらいがいいです。
    このTeraPadとコンパイラを連動させている例がネット上に二つありました。
    一つは対象がVisual-C、もう一つはmingwでしたがこちらは実行ファイルを一般公開していません。

    Cの学習だし、コマンドプロンプトで十分なんだけど、私はタイプミスが多くてイラつくんですよね。

    • dennou より:

      TeraPadいいですね。シンプルですし。
      わたしもエディタに関しては色々と使ってみてようやく落ち着いてきた感じです。

      質問頂いたおかげでわたしも勉強になりました。ありがとうございました。

  6. 初心者 より:

    このサイトの手順通りにやってみたのですが実行結果が微妙に異なってしまいます。if ($?)というのは何かがうまくいっていないのでしょうか。下に実行結果を載せます。

    PS C:\Users\81809\Documents\gcc> cd “c:\Users\81809\Documents\gcc\” ; if ($?) { gcc -fexec-charset=CP932 hello.c -o hello } ; if ($?) { .\hello }
    C言語は習うより慣れよ

    また、実行時にhello.exeというファイルが作成されるのですが、「このファイルはバイナリか、サポートされていないテキストエンコードを使用しているため、エディターに表示されません」と出て無理に開くと完全に文字化けしてしまっています。これはどうしてなのでしょうか。

    • dennou より:

      初心者 さん、こんにちは。管理人です。

      つい2日間にこの記事のコメント欄で同じ質問がありまして、どうやら既定のシェルがPS(Windows Power Shell)だとこのメッセージがでるようです。
      既定のシェルをcmd(コマンドプロンプト)に設定しなおすとif($?)…という表示がきえ通常の実行になるはずです。

      以下の動画で既定のシェルをコマンドプロンプトに変更していますので、設定しなおしてみてください。
      動画では実行して同じエラーメッセージを出した状態から変更する操作をしています。

      動画URL(既定のシェルを変更する方法)
      https://youtu.be/qKf_oqvX164

      > 実行時にhello.exeというファイルが作成されるのですが、「このファイルはバイナリか、サポートされていないテキストエンコードを使用しているため、エディターに表示されません」と出て無理に開くと完全に文字化けしてしまっています。これはどうしてなのでしょうか。

      こちらの質問は状況がよくわからないのですが、hello.exeをダブルクリックして実行したら上記のエラーが表示されるという意味でしょうか?

      • 初心者 より:

        管理人様 返信遅れてしまい申し訳ないです。
        同じ質問というのは、たぶん自分のせいかと、、1回目に送ったときにコメント欄に表示されなかったので時間をおいて、もう一度送らせていただきましたw お騒がせしてしまい申し訳ありません。。

        わざわざ動画にしていただき、本当にありがとうございます!!
        PSについては解決しそうです!

        > 実行時にhello.exeというファイルが作成されるのですが、「このファイルはバイナリか、サポートされていないテキストエンコードを使用しているため、エディターに表示されません」と出て無理に開くと完全に文字化けしてしまっています。これはどうしてなのでしょうか。

        実行すると、hello.cの下にhello.txtというファイルが勝手に作られて、中にはこのコメントが書かれているという状態です。「このまま開きますか?」というところをダブルクリックすると完全に文字化けしてしまっているという状態です。

        • dennou より:

          こんばんは。初心者さん。

          > 実行時にhello.exeというファイルが作成されるのですが、「このファイルはバイナリか、サポートされていないテキストエンコードを使用しているため、エディターに表示されません」と出て無理に開くと完全に文字化けしてしまっています。これはどうしてなのでしょうか。

          コンパイルを行うとhello.cであればhello.exeという実行ファイルが作成されます。
          このhello.exeをターミナル上で実行までしてくれるのがCode Runnerの機能なので、VsCode上でhello.exeを選択して何かするということは必要ないです。(hello.exeのファイルが作成されていれば問題ないということです)

          通常拡張子が~.exeのファイルは中身を見ようとすると文字化けして見ることができません。
          これはバイナリファイルといってコンピュータしか理解できないファイルです。
          だから初心者さんの言うように「文字化けして」当然です。

          ~.c → C言語プログラム(人間が理解できる)
          ~.exe → 実行ファイル(コンピュータが理解できる)

          とでも憶えてください。

          hello.txtが作成されたということですが、一度右クリックして削除して再度作成されないようであれば問題ないです。

  7. k より:

    質問失礼します。

    文字化け対策の入力時(「gcc」の後「-fexec-charset=CP932」文字列を追加)した際に、以下のエラーが発生します。

    発生場所 行:1 文字:36
    + cd “c:\Users\s134472\Desktop\gcc\” && gcc -fexec-charset=CP932 hello.c -o hello …
    + ~~
    トークン ‘&&’ は、このバージョンでは有効なステートメント区切りではありません。
    発生場所 行:1 文字:81
    + … llo.c -o hello && “c:\Users\s134472\Desktop\gcc\”hello
    + ~~
    トークン ‘&&’ は、このバージョンでは有効なステートメント区切りではありません。
    発生場所 行:1 文字:84
    + … .c -o hello && “c:\Users\s134472\Desktop\gcc\”hello
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    式は、パイプラインの最初の要素としてのみ許可されます。
    発生場所 行:1 文字:115
    + … 2\Desktop\gcc\”hello
    + ~~~~~
    式またはステートメントのトークン ‘hello’ を使用できません。
    + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

    別サイトで、「code-runner.executorMap」内の「setting.json」について「&&」の箇所(形23カ所)を「-and」に置換すると、次に以下のエラーメッセージが発生します。

    (変更前)
    “c”: “cd $dir && gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt -and $dir$fileNameWithoutExt”,
    (変更後)
    “c”: “cd $dir -and gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt -and $dir$fileNameWithoutExt”,

    (参考サイト)
    http://tooljp.com/language/powershell/html/Token-is-not-a-valid-statement-break-in-this-version.html

    (エラーメッセージ)
    Set-Location : パラメーター名 ‘o’ があいまいなため、パラメーターを処理できません。一致する名前の候補は次のとおりです: -OutVariable -OutBuffer。
    発生場所 行:1 文字:74
    + cd “c:\Users\s134472\Desktop\gcc\” -and gcc -fexec-charset=CP932 hello.c -o hell …
    + ~~
    + CategoryInfo : InvalidArgument: (:) [Set-Location]、ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.SetLocationCommand

    別のパソコンでは、「&&」を「-and」に置換したあと、setting.jsonの「“code-runner.executorMap”:」を削除することで、問題を解決できています。ちなみに、現使用パソコン、および、別のパソコンはどちらもOSはWin8.1です。

    よろしくお願いします。

    • dennou より:

      k さん、こんにちは。管理人です。
      WindowsでのVsCodeではターミナルの設定がデフォルトでPS(PowerShell)になっているようで、gccでコンパイルする際、色々と問題が発生します。(わたしも当初このことに気づいていませんでした)

      まずはgccでコンパイルする際、cmd(コマンドプロンプト)を使うようにする必要があります。

      本日記事を追記したので、まずは既定のシェルの設定をcmd(コマンドプロンプト)にしてみてください。

      既定のシェルをcmd(コマンドプロンプト)に設定する【2021.02.16追記】

      上記の設定は、前項目の「C言語プログラミングを楽にするための設定」が全て終了していることが前提となります。
      お話から察するに、すでにkさんの方で変更した「&&」→「-and」を再度「-and」→「&&」に置換しなおす必要があると思います。

      • クマ より:

        Run In Terminalという項目にチェックを入れるとユーザー設定に書き込めません。ユーザー設定を開いてファイル内のエラーを修正してからもう一度お試しくださいと出てきてしまいます。どうしたらいいでしょうか。また

        • dennou より:

          クマさんお早うございます。管理人です。

          おそらくRun In Terminalのチェックを入れる前に書き換えた設定の段階で必要な文字を消してしまっている可能性があります。

          「ユーザ設定に書き込めません…」のエラーメッセージが表示された際、「設定を開く」というボタンが表示されるかと思います。このボタンをクリックして設定をひらき、間違っている箇所を修正する必要があります。

          settings.jsonというファイルが開くことになりますが、このファイルはJSON形式といって例えば次のような形式です。

          “doubutu”: {
          “name1”: “キツネ”,
          “name2”: “タヌキ”,
          “name3”: “ネコ”,
          },
             :
          よくあるのは「,」(半角カンマ)や「”」(ダブルクォーテーション)を付け忘れたり、消してしまったりする例です。
          「:」(コロン)なんかも間違って「;」(セミコロン)で入力してしまったりとかもあります。

          Code Runnerの設定のとき「-fexec-charset=CP932」などの文字列を追加したかと思いますが、その際必要な文字列を消してしまった可能性などがあります。
          もう一度ユーザ設定ファイルを見直してみてください。

          一応修正イメージを動画にしたので参考にしてください。(動画の例では「,」を付け忘れている例です)

          https://youtu.be/8w5OGjsjba8

        • クマ より:

          いらない文字を追加してしまっていました。この手順通りに進めて実行までできました。ありがとうございます!

      • k より:

        管理人 様
        コメントありがとうございます。

        「&&」→「-and」を再度「-and」→「&&」に置換しなおし、既定のシェル設定でPSを削除してcmdに設定しました。
        次に、コンパイルを実行すると、

        ターミナルの所が、『2:Code』となり、以下のエラーメッセージが表示されます。

        C:\Users\s134472\Desktop\gcc>cd “c:\Users\s134472\Desktop\gcc\” && gcc -fexec-charset=CP932 tempCodeRunnerFile.c -o tempCodeRunnerFile && “c:\Users\s134472\Desktop\gcc\”tempCodeRunnerFile
        ‘gcc’ は、内部コマンドまたは外部コマンド、
        操作可能なプログラムまたはバッチ ファイルとして認識されていません。

        また、「gcc」フォルダの所に「Hello.c」ファイルの次に「tempCodeRunnerFile.c」が追加され、そのファイル内には1行だけ

        #include

        が表示されています。

        よろしくお願いします。

        ※すみません、下のコメントは余分のため、削除を希望します。

        • dennou より:

          こんばんは kさん。管理人です。

          > ‘gcc’ は、内部コマンドまたは外部コマンド、
          > 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

          このエラーメッセージはgcc.exeというコンパイラアプリへのWindowsのパス設定がされていない状態です。

          一応お聞きしますが、gccコンパイラはインストールされていますか?
          もしインストールがまだであれば、C言語のコンパイルや実行ができません。
          以下を参考にgccコンパイラをインストールしてください。

          WindowsにC言語開発環境(gccコンパイラ)を導入する

          あるいはすでにgccコンパイラをインストール済みであれば、単にgcc.exeへのWindowsのパス設定がされていない状態ですので、上記リンク先内の「MinGWをコマンドラインから使うための設定」の項目にあるPath設定をしてみてください。

          あと、tempCodeRunnerFile.cのファイルに関しては機能拡張のCodeRunnerが吐き出した不要なファイルなので削除してしまっても構いません。おそらくきちんとgccでコンパイルが出来ていないため残ってしまったファイルかと思われます。
          頑張ってみてください。

          • k より:

            管理人様

            コメントありがとうございます。
            現在、「MinGWのインストール」が完了しています。

            次の「MinGWをコマンドラインから使うための設定」で、サイトの説明ではOSがWin10での設定?の様なのですが、OSがWin8.1と言う事もあり、環境変数の入力の画面が違うため、ここで設定が止まってしまっています。

            ユーザーの環境変数の所に
            変数”Path” 値”・・・(CドライブにもPath入っている様な表示)”はあります。

            そこで、「新規」をクリックすると、新しいユーザー変数と表示され、
            変数名(N):”入力画面”
            変数値(V):”入力画面”
            の事が聞かれます。

            上記の、変数名および変数値には、何を入力すれば良いのでしょうか。
            以前、Pathに

            C:\MinGW\bin

            に近い形を入力すると、Pathの所が全部消えた事があり、この入力で良いのか自信がありません。

            ここが解決できると、
            「ファイル名を指定して実行」→「cmd」の話に進められそうな感じです。

            よろしくお願いします。

          • dennou より:

            こんばんは k さん。
            Windows8.1は環境変数の設定画面が違うのでしたね。失礼しました。

            【Windows8.1の場合】
            1.ユーザーの環境変数の所にすでに変数Pathが存在している場合は、「編集…」ボタンをクリックします。
            2.変数名の項目が「Path」となっているかと思います。変数値の項目はおそらくテキストボックスに入りきらないくらい文字列が並んでいるので、そのテキストボックスの一番最後までカーソルを移動します。(要するに変数値に入力済みの内容は消さないようにします)
            3.変数値の一番最後の文字が「;」であれば、その後に「C:\MinGW\bin;」を追加してOKボタンを押します。最後の文字が「;」出ない場合は「;」を最後に追加してから「C:\MinGW\bin;」を追加してOKボタンを押します。

            ちなみに「;」は複数のパスをつなげる役割があるので「c:\Windows」と「C:\MinGW\bin」をつなげる場合、「c:\Windows;c:\MinGW\bin;」などとなります。
            最後に「;」を入れておくと次回別のパスを追加する際、間違いがないです。
            パス名や「;」の前後などにスペースは入れないでください。

            あと一応CドライブのMinGWフォルダ内にあるbinフォルダの中にgcc.exe(gccコンパイラ本体)が存在しているかも確認しておいてください。

  8. k より:

    管理人様

    ご連絡ありがとうございます。
    昨日の助言の操作の通りに作業をしました所、コマンドプロンプトの実行で、設定通りにできました。

    ”入力画面”←テキストボックス

    の所も説明があり、拙い表現での質問だったにも関わらずありがとうございました。
    これで、一通りのプログラム作業ができるかと思います。

    また不明な点がありましたら、よろしくお願いします。

  9. 薬師寺 より:

    出力結果に
    ‘gcc’ は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません

    とあり結果が出力されませんでした。
    gccコンパイラはインストール済みで、コマンドプロンプトでのgccコンパイラバージョン表示もなりました。
    何をすればいいかわかりません!よろしくお願いします。

  10. 薬師寺 より:

    すみません先ほどコメントさせていただいたのですが再起動したらなりました!!
    お恥ずかしい限りです…(笑)ほんとにごめんなさい。
    とにかくC環境出来てよかったです!ありがとうございました。

    • dennou より:

      管理人です。良かったですね。
      パス設定などをする前からターミナルを開いていたりすると一旦ターミナルを終了してからでないとこういったメッセージがでることがあります。

  11. ラット18号 より:

    管理人様

    質問させていただきます。
    デスクトップ上にc_testというフォルダを作り、その中にhello.cを保存し、vscode上で実行しましたが以下のエラーメッセージが表示されます

    C:\Users\user\Desktop\c_test>cd “c:\Users\user\Desktop\c_test\” && gcc fexec-charset=CP932 hello.c -o hello && “c:\Users\user\Desktop\c_test\”hello
    gcc: error: fexec-charset=CP932: No such file or directory

    どのように対処したらよいでしょうか。

    • dennou より:

      ラット18号 さん、こんばんは。
      管理人です。

      エラーメッセージから察するに対象記事での「Code Runnerの設定を行う」の項での設定が間違っています。

      gccの後に追加する文字列「-fexec-charset=CP932」の先頭の「」(ハイフン)が抜けています。
      もう一度設定を見直してみてください。

  12. ラット18号 より:

    管理人様

    こんばんは、ラット18号です。

    ハイフンが抜けていました。このようなことでお手数をおかけして申し訳ございません。
    今後もサイトの方を参考にさせていただきます。

    • dennou より:

      ラット18号さん、解決できて良かったです。
      ちょっとしか事かもしれませんが、この「ちょっとした事」に自分で気づくようになると何でも上達しますんで頑張ってみてくださいね!

  13. kiryu より:

    管理人様

    質問失礼します。
    デスクトップ上にgccというフォルダを作り、その中にhello.cを保存し、vscode上で実行しましたが以下のエラーメッセージが表示されます

    Microsoft Windows [Version 10.0.19041.928]
    (c) Microsoft Corporation. All rights reserved.

    C:\Users\kaoru\others\Documents\gcc>cd “c:\Users\kaoru\others\Documents\gcc\” ; if ($?) { gcc -fexec-charset=CP932 hello.c -o hello } ; if
    ($?) { .\hello }
    ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

    似たような質問をお見受けしたのですが、「既定のシェルの選択」はなくかわりに「既定のプロファイルの選択」でcmdを選択したのですが、反映されません。
    どのように対処したらよいでしょうか?

    • dennou より:

      kiryu さん、こんばんは。管理人です。

      どうやらつい最近アップデートしたVisual Studio CodeのバージョンApril 2021 (version 1.56)からターミナルの扱いが変更になっているらしく、以前まで表示されていた「既定のシェルの選択」という項目が消えてしまいました。
      「既定のプロファイルの選択」でcmdを指定してもうまくいかないようです。わたしもVsCodeをアップデートしたら同じ現象になりました。むしろ連絡して頂きありがとうございました!

      最新バージョンのVisual Studio Codeでは非推奨となってしまいましたが、以下の設定を試してみてください。
      1.メニューの ファイル > ユーザー設定 > 設定を開く(Ctrl+,でも同じ)
      2.右上のRun Codeボタン(再生アイコンのボタン)の右隣りにある設定(JSON)を開くボタンをクリックしてsettings.jsonファイルを表示
      3.“code-runner.executorMap”: {…の上あたりの場所でいいので、以下の文字列を追加する

      "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",

      4.settings.jsonを上書き保存

      わたしの場合はこれでうまくいきました。ただしこの設定は非推奨なのでターミナルウインドウに問題として表示されます。一時的な対処になりそうですが今のところ他の方法が見つかりません。

      上記手順の動画を参考にアップしたので参考にしてみてください。

      https://youtu.be/hCwV0alLE6I

      • kiryu より:

        管理人様

        kiryuです。返信ありがとうございます!
        言われたとおりにやったらできました。わざわざ動画までつけていただき感謝しかないです。
        また何かございましたらよろしくお願いいたします‼

  14. ぽんちゃん より:

    はじめまして!
    環境を作成する際にこちらの記事を参考にさせていただきました。ありがとうございます。
    さて、”terminal.integrated.shell.windows”: “C:\\WINDOWS\\System32\\cmd.exe” 
    (すいません、コードスニペットの記述方法がわかりませんでした。)の設定についてですが、非常に参考になるかと思われるWebページを発見したので載せておきます。
    完璧な回答とは言い難いかもしれませんが、参考になれば幸いです。

    https://qiita.com/take_me/items/47f192a126d75a9264a9

    • dennou より:

      ぽんちゃん さんこんにちは。
      管理人です。

      教えて頂いた

      ”terminal.integrated.shell.windows”: “C:\\WINDOWS\\System32\\cmd.exe”

      の設定についてのこちらのリンク非常に参考になります。(わたしもまだよく分かっていないですが…)
      もうちょっと勉強してみます。ありがとうございました!