C言語のきほん|コマンドラインと文字コード

CLIと文字コードを先に押さえると、C言語の学習はぐっとラクになる。文字化けを防いで、安心して開発を始めよう

C言語の学習を始めると、コードを書く前にまず出会うのが CLI と文字コードです。
ここは最初に少しだけ理解しておくと、その後の コンパイルできない、実行できたのに文字が変 というつまずきをかなり減らせます。

この記事では、Windows でよく使う CLI(コマンドプロンプト / PowerShell)の違いをやさしく整理しつつ、文字コードの基本、文字化けの原因、そして実際の対処方法までをまとめて説明します。特に Windows のコマンドプロンプトでは、コードページの設定が表示結果に影響するので、C言語の学習ではここを押さえておくのが大事です。Microsoft の chcp コマンドの説明でも、chcp はコンソールのアクティブコードページを変更するためのコマンドとして案内されています。 (Microsoft Learn)

また、VS Code 側は UTF-8 を前提に使うことが多く、PowerShell / コマンドプロンプトとの文字コードの違いが混乱ポイントになりやすいです。PowerShell と VS Code のエンコードに関する Microsoft ドキュメントでも、VS Code の既定エンコードは UTF-8 without BOM と説明されています。 (Microsoft Learn)

まず押さえたい全体像

この記事でやること

項目内容目的
CLIの基本CLIとは何か、何に使うかC言語学習での役割を理解する
WindowsのCLI比較コマンドプロンプトとPowerShellの違いどちらを使うか判断しやすくする
文字コードの基本Shift-JIS と UTF-8 の違い文字化けの原因を理解する
文字化け対策chcp 65001 の使い方Windowsで日本語を正しく表示する
動作確認日本語表示のサンプルCプログラム実際に試して確認する

最初に全体を見ておくと、CLI と文字コードが別の話ではなく、C言語の実行環境としてつながっていることが見えやすくなります。

CLIとは何か

CLI は、文字でコマンドを入力してコンピュータに指示を出す操作方法です。
マウス中心の GUI と違って、キーボードで命令を打ち込んで作業します。

Windows には cmd.exe(コマンドプロンプト)が標準のコマンドインタープリターとして用意されており、Microsoft のコマンド資料にも cmd は cmd.exe の新しいインスタンスを開始するコマンドとして説明されています。 (Microsoft Learn)
また、PowerShell はコマンドラインシェル + スクリプト言語 + 自動化基盤として提供されているツールで、より高度な自動化にも向いています。 (Microsoft Learn)

図:CLIのイメージ

あなたがコマンドを入力
   ↓
CLI が命令として受け取る
   ↓
OS が処理する
   ↓
結果が文字で表示される

この図は、CLI を 操作画面 ではなく 指示の通り道 としてイメージしやすくするための図です。
C言語では、この流れの中で gcc にコンパイルを頼んだり、作った実行ファイルを起動したりします。

C言語でCLIを使う理由

C言語の学習では、CLI を使って次の2つをよく行います。

  • コンパイル
  • 実行

C言語学習でのCLIの役割

操作何をしているか
コンパイルgcc sample.c -o sampleCソースを実行ファイルに変換
実行sample実行ファイルを起動
確認gcc -vGCCのバージョンや設定を確認

ポイントは、CLI が 難しい特別なもの ではなく、C言語の作業を進めるための実用ツールだと分かることです。
最初は短いコマンドから慣れていけば大丈夫です。

図:C言語の基本的な流れ

Cのソースコードを書く
   ↓
gcc でコンパイル
   ↓
実行ファイルができる
   ↓
実行して結果を見る

ここに 文字コード の話が入ってくるのは、最後の 結果を見る ときに日本語表示へ影響するからです。

Windowsでよく使うCLI

コマンドプロンプトとPowerShellの違い

Windows では代表的な CLI として、コマンドプロンプトと PowerShell が使えます。
どちらでも C言語の開発はできますが、学習の最初はコマンドプロンプトのほうがシンプルで分かりやすいことが多いです。

Microsoft の cmd の説明ページでも、より高度なスクリプトや自動化には PowerShell を検討するよう案内があります。つまり、cmd はシンプル、PowerShell はより高機能、という位置づけで考えると分かりやすいです。 (Microsoft Learn)

コマンドプロンプトとPowerShellの比較

項目コマンドプロンプトPowerShell
特徴シンプルで軽い高機能で自動化に強い
学習のしやすさはじめてでも扱いやすい機能が多く少し広い
C言語学習との相性基本操作に十分もちろん使える
文字コードの注意コードページ設定の影響を受けやすいバージョン差を意識すると安心

図:使い分けの考え方

まずはC言語の基本を学ぶ
   ↓
コマンドプロンプトで十分
   ↓
慣れてきたら
   ↓
PowerShell も使える

まずは cmd で コンパイルと実行 ができる状態を作ればOKです。

文字コードとは何か

文字コードは、文字をコンピュータの中で数値として扱うためのルールです。
コンピュータは 0 と 1 で処理するので、A や あ も内部では数値に変換されています。

Microsoft のコードページ関連ドキュメントでも、コードページは文字と数値の対応表として説明されています。たとえば日本語向けには code page 932(Shift JIS 系)が挙げられています。 (Microsoft Learn)

文字コードをやさしく理解するための見方

たとえ実際の意味
辞書文字と数値の対応表
翻訳ルールどの数値をどの文字として読むかの約束
ルール違い同じ数値でも別の文字に見える原因

大事な点は、文字化けの正体が データが壊れた ではなく 読み方のルールが違う ことが多い、というところです。

図:文字コードのイメージ

「日」という文字
   ↓
ある文字コードのルールで数値に変換
   ↓
保存・出力される
   ↓
別のルールで読むと
   ↓
文字化けすることがある

この図は、文字化けが起きる流れをシンプルに見せています。
C言語のプログラムそのものは正しくても、表示側のルールが違うと文字化けします。

Shift-JIS と UTF-8 の違い

日本語を扱う場面でよく出てくるのが Shift-JIS と UTF-8 です。

Shift-JIS

Windows の日本語環境で長く使われてきた文字コードです。
Microsoft のコードページ一覧でも、932 は shift_jis として案内されています。 (Microsoft Learn)

UTF-8

現在、Web や多くの開発環境で広く使われる文字コードです。
PowerShell / VS Code のエンコード解説でも UTF-8 が中心的に扱われており、VS Code の既定エンコードは UTF-8 without BOM と説明されています。 (Microsoft Learn)

Shift-JIS と UTF-8 の比較

項目Shift-JISUTF-8
主な利用場面従来のWindows日本語環境現在の開発環境・Web全般
互換性環境依存で注意が必要国際的に互換性が高い
C言語学習での注意cmd の既定表示と相性があるVS Code の既定と相性がよい

今回の教材で起きやすいズレ

VS Code(UTF-8で保存)
   ↓
コマンドプロンプト(Shift-JIS系で表示)
   ↓
日本語の表示が合わない
   ↓
文字化け

この図は、今回のテーマの核心です。
VS Code 側とコマンドプロンプト側の文字コードがズレると、ソースコードは正しくても表示が崩れます。

文字化けとは何か

文字化けは、文字コードの解釈が一致していないときに起こる表示の乱れです。
よくあるのは、UTF-8 で書かれた日本語を Shift-JIS 前提の表示環境で読んでしまうケースです。

文字化けが起きるよくある原因

原因結果
保存時の文字コードと表示側が違うUTF-8で保存 → Shift-JIS前提で表示日本語が崩れる
CLIのコードページ設定が合っていないcmd の設定が既定のまま実行結果の日本語が崩れる
環境ごとの差Windows / Linux / macOS の差同じプログラムでも表示が変わる

図:文字化けの原因を分解する

ソースコードの文字列(日本語)
   ↓
コンパイル
   ↓
実行時にCLIへ出力
   ↓
CLIの文字コード設定で解釈
   ↓
一致すれば正常 / 不一致なら文字化け

実際には 表示環境の設定 が原因になっていることが多いです。

当サイトでのおすすめ対応

VS Code は UTF-8 を前提に使うことが多いので、Windows のコマンドプロンプト側を UTF-8 に合わせるのが分かりやすいです。
そのために使うのが chcp 65001 です。

Microsoft の chcp ドキュメントでは、chcp はアクティブなコードページを変更するコマンドで、番号で指定します。 (Microsoft Learn)
また、Microsoft のコードページ一覧では 65001 は UTF-8、932 は Shift-JIS 系として確認できます。 (Microsoft Learn)

実際の手順

  1. コマンドプロンプトを開く
  2. chcp 65001 を入力する
  3. そのあとでプログラムを実行する

chcp 65001 の意味

コマンド意味
chcpコードページを変更する
65001UTF-8 のコードページ番号

図:設定変更の流れ

cmd を起動
   ↓
chcp 65001 を入力
   ↓
コードページが UTF-8 になる
   ↓
日本語を含むプログラムを実行
   ↓
文字化けしにくくなる

chcp 65001 を ただ覚える のではなく、何を変えているのかを理解しやすくするための図です。

コマンドプロンプト再起動で戻る理由

教材にもあるとおり、コマンドプロンプトを閉じて開き直すと、設定が元に戻ることがあります。
これは chcp が そのコンソールセッションのアクティブコードページ を変更するコマンドだからです。新しく開いたウィンドウは、また既定の設定で始まります。Microsoft の chcp 説明も、アクティブなコンソールコードページの変更として説明しています。 (Microsoft Learn)

よくある動き

状態コードページ
新しく cmd を開いた直後既定値(日本語環境では932系が多い)
chcp 65001 実行後UTF-8(65001)
cmd を閉じて再度起動既定値に戻ることがある

PowerShell を使う場合の補足

PowerShell でも C言語のコンパイルや実行はできます。
ただし、PowerShell はバージョン(Windows PowerShell 5.1 と PowerShell 7 系など)で既定のエンコード挙動が異なる部分があるので、教材の最初の段階では cmd のほうが説明をそろえやすいです。PowerShell の文字エンコード解説でも、Windows PowerShell と PowerShell(7系)で既定の挙動に違いがあることが説明されています。 (Microsoft Learn)

PowerShellの文字コードで気をつけたい点

ポイント説明
バージョン差5.1 と 7系で既定挙動が違うことがある
ファイル出力コマンドによって既定エンコードが違う場合がある
学習初期の方針まずは cmd で基本を覚えると整理しやすい

MacOS と Linux の補足

macOS や Linux の CLI は、最近の環境では UTF-8 前提で動くことが多いので、Windows ほど最初にコードページ設定を意識しなくてもよいケースが多いです。
ただし、環境設定や端末設定によって表示結果は変わることもあるので、日本語が崩れたときは 端末の文字コード設定 と ファイルの保存文字コード を確認する、という考え方は共通です。

動作確認用のシンプルなCプログラム例

今回は 文字コード確認 に合わせたメッセージにしています。

ファイル名:mojibake.c

#include <stdio.h>

int main(void)
{
    /* CLIで日本語が正しく表示されるか確認する */
    printf("CLIで日本語を確認できました!\n");

    return 0;
}

サンプルプログラムの説明

内容役割
#include <stdio.h>標準入出力の準備printf を使うため
int main(void)プログラムの開始地点実行の入口
printf(...)日本語メッセージの表示文字化け確認に使う
return 0;正常終了プログラム終了

図:このサンプルの確認手順

ソースを保存(UTF-8)
   ↓
gcc でコンパイル
   ↓
cmd で chcp 65001
   ↓
実行
   ↓
日本語が正しく表示されるか確認

単にプログラムが動くかだけでなく、表示も確認するのがポイントです。

実際によく使うコマンドまとめ

表最低限これだけ覚えればOK

コマンド用途
gcc -vGCCの確認
chcp 65001cmd を UTF-8 に切り替える
gcc sample.c -o sampleコンパイル
sample実行

この4つを使えるようになると、C言語の学習をかなり進めやすくなります。

まとめ

CLI は、C言語で コンパイル と 実行 を行うための大事な道具です。
そして Windows では、CLI と文字コードの組み合わせを理解しておくことで、文字化けのトラブルをかなり防げます。

今回のポイントはこの3つです。

  • C言語学習では、まずコマンドプロンプトで基本操作を覚えると進めやすい。
  • VS Code は UTF-8 前提、cmd は既定で Shift-JIS 系の設定になることがある。
  • chcp 65001 で cmd 側を UTF-8 に合わせると、日本語表示が安定しやすい。

ここを押さえておけば、次の章の コンパイルして実行する 学習に気持ちよく進めます。