Windows環境でのC言語:プログラムの作成から実行まで

【概要】本資料は、Windows環境でC言語プログラミングを始めるための入門教材である。Visual Studio Build Toolsを用いた開発環境の構築から、コンパイル・実行の基本操作、標準入出力を扱うプログラムの作成までを扱う。

スライドによる説明: [PDF], [PPTX]

項目 内容
対象読者 C言語の初心者。Windowsの標準機能(メモ帳)でC言語プログラミングの基礎を学習する者。
前提条件 Windowsの基本操作(ファイルの作成、コマンドプロンプトの起動)ができること。Windows 11であり、管理者権限を持つアカウントでサインインできること。
学習目標 C言語のソースコードをコンパイルして実行できる。標準入力からデータを読み取るプログラムを作成できる。
使用するツール 本資料ではVisual Studio Build Tools 2022(コンパイラcl)を用いる。2025年11月以降はVisual Studio 2026系のBuild Toolsも提供されているが、本資料では入手実績の豊富な2022系で統一して説明する。2026系を導入した場合は、コマンドプロンプトの名称などが「VS 2026」に読み替わる。

【目次】

  1. C言語プログラミングの準備
  2. コンパイルとは何か
  3. 最初のプログラム
  4. 開発環境の準備
  5. メモ帳でのプログラム作成と保存
  6. コンパイルと実行
  7. キーボード入力のプログラム
  8. よくあるエラーとその対処法
  9. まとめ

1. C言語プログラミングの準備

1.1 この資料で学ぶこと

本資料では、C言語のプログラムをWindows環境で作成し、実行する方法を学ぶ。具体的には、次の二つを行う。

扱うプログラムは、文字列を出力する「Hello, World!」プログラムと、キーボードからの入力を処理するプログラムである。ここで学ぶ操作と手順は、C言語プログラミングの基礎となる。

1.2 使用する道具

本資料では、Windowsに標準で搭載されているメモ帳と、無料で入手できるVisual Studio Build Toolsを用いる。これらにより、有償ツールを用いずにC言語プログラミングを行うことができる。

1.3 重要概念

本資料を読み進める前に、以下の用語を確認しておく。

1.4 コンパイルとは何か

C言語では、作成したソースコードをそのまま実行することはできない。実行する前に、ソースコードを機械語(CPUが実行できる形式)に変換する必要がある。この変換処理を「コンパイル」と呼ぶ。

本資料では「コンパイル」と総称するが、内部的には二つの段階に分かれる。一つはコンパイラによる機械語生成(オブジェクトファイル .obj の作成)であり、もう一つはリンカ(オブジェクトファイルを結合して実行ファイルを作るプログラム)による実行ファイル生成(.exe の作成)である。

1.5 作業全体の流れ

プログラムの作成から実行までは、次の手順で進む。ここでは流れの全体像を示すにとどめ、実際の操作は第4章以降で順を追って行う。この時点で手元のPCでコマンドを実行する必要はない。

  1. メモ帳でソースコードを作成し、ファイル名「hello.c」で保存する
  2. コマンドプロンプトで cl hello.c を実行してコンパイルする(実行ファイル hello.exe が生成される)
  3. コマンドプロンプトで hello.exe を実行する

ソースコードを修正した場合は、再度コンパイルしてから実行する。なお、ここで用いている「hello.c」の具体的な中身は、第5章で作成する。

1.6 本資料の読み方

本資料は、第4章で開発環境を構築し、第5章でソースコードを作成、第6章でコンパイル・実行する流れで構成されている。第2章および第3章は概念とコード例の紹介であり、この時点で手元のPCでコマンドを実行する必要はない。

2. コンパイルとは何か

C言語では、実行前にソースコードを機械語(CPUが実行できる形式)に変換する。この変換処理を「コンパイル」と呼ぶ。

作業手順

  1. ソースコードを作成する(hello.c)
  2. cl hello.c でコンパイルする(hello.exe が生成される)
  3. hello.exe で実行する

ソースコードを修正した場合は、再度コンパイルしてから実行する。

上記の手順は概念把握のための説明であり、実際の操作は第4章以降で順を追って行う。この時点でコマンドを実行する必要はない。

3. 最初のプログラム

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

各行の役割

コード 役割
#include <stdio.h> printf関数を用いるために必要
int main() プログラムの実行開始位置
printf("Hello, World!\n"); 文字列を画面に出力する。\nは改行を表す。末尾にセミコロンが必要。
return 0; プログラムの終了

上記のソースコードをテキストエディタで作成し、hello.cという名前で保存する。具体的な保存手順は第5章で説明する。

4. 開発環境の準備

4.1 オンライン環境(参考)

インストールを行わずに、ブラウザ上でコンパイルと実行ができる。本資料の主たる学習対象はローカル環境(4.2節)であり、オンライン環境は参考として紹介する。

4.2 ローカル環境の構築

所要時間とディスク容量の目安:インストールには概ね30〜60分、ディスク容量は8〜10GB程度を要する。ネットワーク環境および端末性能により変動する。

  1. 管理者権限でコマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー → cmdと入力 → 右クリック → 「管理者として実行」)。
  2. winget(Windowsに標準搭載されているパッケージ管理ツール。ソフトウェアのインストールや更新をコマンドで行う)が利用可能か確認する。
    winget --version
    wingetのバージョン確認コマンドを実行した結果の画面
  3. 以下のコマンドを、手順1で起動した管理者権限のコマンドプロンプトで実行する。
    REM VC++ ランタイム
    winget install --scope machine --id Microsoft.VCRedist.2015+.x64 -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/quiet /norestart"
    
    REM Build Tools + Desktop development with C++(VCTools)+ 追加コンポーネント(一括)
    winget install --id Microsoft.VisualStudio.2022.BuildTools --accept-source-agreements --accept-package-agreements ^
        --override "--passive --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --add Microsoft.VisualStudio.Component.VC.Llvm.Clang --add Microsoft.VisualStudio.ComponentGroup.ClangCL --add Microsoft.VisualStudio.Component.VC.CMake.Project --add Microsoft.VisualStudio.Component.Windows11SDK.26100"

    上記のコマンドでは、まずVC++ランタイム(Visual C++再頒布可能パッケージ。C++プログラムの実行に必要な共通ライブラリ)をインストールし、続いてBuild Tools本体と以下のコンポーネントを--overrideオプションにより一括して追加する。なお、--includeRecommendedを指定すると推奨コンポーネントが自動的に含まれるため、下記のうちCMakeツールやWindows 11 SDKは個別指定が重複する場合があるが、明示しておいても支障はない。

    • VCTools:C++デスクトップ開発ワークロード(--includeRecommendedにより、MSVCコンパイラ、C++ AddressSanitizer、vcpkg、CMakeツール、Windows 11 SDK等の推奨コンポーネントが含まれる)
    • VC.Llvm.Clang:Windows向けC++ Clangコンパイラ
    • ClangCL:clang-clツールセットを含むコンポーネントグループ(MSBuildからClangを用いるために必要)
    • VC.CMake.Project:Windows向けC++ CMakeツール
    • Windows11SDK.26100:Windows 11 SDK(ビルド10.0.26100系)

    インストール完了後、以下のコマンドでインストール状態を確認できる。

    winget list Microsoft.VisualStudio.2022.BuildTools

    上記以外のコンポーネントが必要になった場合は、Visual Studio Installerから個別にインストールできる。

4.3 インストールの確認

インストール完了後、スタートメニューから「x64 Native Tools Command Prompt for VS 2022」(コンパイラclが使える状態で起動する専用のコマンドプロンプト)を検索し、起動できることを確認する。スタートメニューに表示されない場合は、Windowsを再起動するか、Visual Studio Installerでインストール状態を確認する。

5. メモ帳でのプログラム作成と保存

5.1 メモ帳の起動

  1. スタートメニュー(画面左下のWindowsマーク)をクリックする。
  2. 「メモ帳」と入力する。
    スタートメニューでメモ帳を検索した画面
  3. 「メモ帳」アプリが表示されるので、クリックして起動する。

5.2 プログラムの入力

第3章で示したプログラムを入力する(または貼り付ける)。

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

5.3 プログラムの保存

  1. 「ファイル」メニューから「名前を付けて保存」を選択する。
    メモ帳のファイルメニューから名前を付けて保存を選択する画面
  2. 保存場所を選択する。本資料では「デスクトップ」を用いる。
  3. 画面下の「ファイルの種類」を「すべてのファイル(*.*)」に変更する。
    • 初期設定の「テキスト文書(*.txt)」のままでは、ファイル名に自動的に「.txt」が追加され、「hello.c.txt」のようになる。これを防ぐため、「すべてのファイル(*.*)」に変更する。
    保存ダイアログでファイルの種類をすべてのファイルに変更した画面
  4. ファイル名を「○○○.c」と入力する。
    • ○○○は任意の名前(例:hello)。
    • .cはC言語のソースコードであることを示す拡張子(ファイル名末尾の、ファイルの種類を表す部分)である。
  5. 「エンコード」(または「文字コード」)で「UTF-8」を選択する。日本語を含まないソースコードであってもUTF-8で保存しておく。
  6. 「保存」をクリックする。

【Windows固有の注意点】

  • 拡張子の表示設定:エクスプローラの既定設定では、よく知られた拡張子(.txtなど)が非表示になっている。この場合、保存したファイルが「hello」としか表示されず、実際には「hello.c.txt」になっていることに気付きにくい。エクスプローラの「表示」メニューから「ファイル名拡張子」を有効にしておくと、確認が容易である。
  • 文字コード:本資料ではUTF-8で保存する。Windows 11のメモ帳では既定がUTF-8(BOMなし)である。日本語を含むソースコードでclから警告C4819が出る場合や、コマンドプロンプトの出力が文字化けする場合は、第8.6節を参照する。
  • 改行コード:メモ帳の既定(CRLF。Windowsで標準的に用いられる改行の形式)のままでよい。

6. コンパイルと実行

6.1 開発者コマンドプロンプトの起動

スタートメニューから「x64 Native Tools Command Prompt for VS 2022」を選択する。これは、コンパイラclが使える状態で起動する専用のコマンドプロンプトである。通常のコマンドプロンプトではclが見つからないため、必ずこちらを用いる。

6.2 ソースコードのあるフォルダへ移動

cdコマンド(フォルダ間を移動する命令)を用いる。デスクトップに保存した場合は、以下のように入力する。

cd /d "%USERPROFILE%\Desktop"

または、ユーザー名を直接指定する場合は以下のとおりである。

cd /d C:\Users\ユーザー名\Desktop

フォルダ名にスペースや日本語が含まれる場合は、「"」で囲む。例:

cd /d "C:\Users\ユーザー名\Desktop\C言語練習"

6.3 コンパイル

cl hello.c

正常時には、概ね以下の出力が表示される(バージョン番号などは環境により異なる)。

Microsoft (R) C/C++ Optimizing Compiler Version XX.XX.XXXXX for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

hello.c
Microsoft (R) Incremental Linker Version XX.XX.XXXXX
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:hello.exe
hello.obj

/out:hello.exeが表示され、errorを含む行が無ければコンパイル成功である。warning(警告)のみであれば実行ファイルは生成されるが、内容を確認する。errorが表示された場合はソースコードに誤りがあるため、第8.1節を参照して修正する。

6.4 実行

hello.exe

Hello, World!が表示されれば実行成功である。

プログラム名は作成時に付けた名前を用いる。大文字と小文字は区別されるため、「Hello.c」と「hello.c」は異なるファイルとして扱われる。

7. キーボード入力のプログラム

キーボードから入力された文字のバイト数を数えるプログラムを作成する。

下記のソースコードでは、変数cint型で宣言している。これは、入力の終わりを表すEOF(通常は-1)と、通常の文字(0〜255)とを区別して受け取るためである。char型ではEOFを正しく判定できない場合がある。

#include <stdio.h>

int main() {
    int c;
    int count = 0;

    while ((c = getchar()) != EOF) {
        count = count + 1;
    }

    printf("バイト数: %d\n", count);
    return 0;
}

各行の解説

コード 解説
int c; 読み取った文字を格納する変数(EOFを区別するためint型)
int count = 0; バイト数を数えるカウンタ
while ((c = getchar()) != EOF) 1バイト読み取り、EOF(End of File、入力の終わり)でなければループを続ける
count = count + 1; カウンタの値を1増やす
printf("バイト数: %d\n", count); バイト数を出力する

実行例

cl count.c
count.exe
a b c d
^Z
バイト数: 8

入力の終わりを伝えるには、行の先頭でCtrl+Zを押し、Enterを押す(上の実行例の^ZはCtrl+Zの入力を表す)。Ctrl+Zを行の途中で押した場合、Windowsのコンソールではキーボードからの入力の終わり(EOF)として扱われない。

実行例の読み解き:入力「a b c d」+改行は、半角文字a、空白、b、空白、c、空白、d、改行の合計8バイトである。空白(半角スペース)と改行も1バイトとして数える。

日本語を入力した場合の注意:本プログラムはgetcharによる読み取り回数(バイト数)を数える。入力がUTF-8で渡される環境では、日本語1文字は3バイト程度になるため、出力されるバイト数は文字数と一致しない。文字数を数える場合は、別途マルチバイト文字(複数バイトで1文字を表す文字)を考慮した処理が必要となる。

8. よくあるエラーとその対処法

8.1 コンパイルエラー

エラーメッセージには行番号が含まれる。該当行を確認して修正し、再度コンパイルする。

例:hello.c(5): error C2065: 'prntf': undeclared identifier

→ 5行目のprntfが誤り(正しくはprintf)である。

例:hello.c(4): error C2146: syntax error: missing ';' before identifier 'return'

→ 4行目の末尾にセミコロンが欠落している。

8.2 「'cl' は内部コマンドまたは外部コマンド...」と表示される場合

8.3 「No such file or directory」または「ファイルが見つかりません」と表示される場合

8.4 リンクエラー(LNK2019, LNK1120など)

リンクエラーは、コンパイラが生成したオブジェクトファイル(.obj)から実行ファイル(.exe)を作るリンク段階で発生するエラーである。関数の呼び出しに対応する実体が見つからないときに生じる。

8.5 「アクセスが拒否されました」と表示される場合

8.6 文字化けが発生する場合

9. まとめ

項目 内容
コンパイル cl ファイル名.c
実行 ファイル名.exe
エラー対処 エラーメッセージの行番号を確認して修正する
入力終了 Ctrl+Z → Enter(行の先頭で押す)

サイト内の関連ページ