Windows環境でのC言語:プログラムの作成から実行まで
| 項目 | 内容 |
|---|---|
| 対象読者 | 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言語プログラミングの準備
1.1 この資料で学ぶこと
本資料では、C言語のプログラムをWindows環境で作成し、実行する方法を学ぶ。具体的には、次の二つを行う。
- C言語のソースコードをコンパイルし、実行ファイル(.exe)を生成する
- キーボードから入力された文字のバイト数を数えるプログラムを作成する
扱うプログラムは、文字列を出力する「Hello, World!」プログラムと、キーボードからの入力を処理するプログラムである。ここで学ぶ操作と手順は、C言語プログラミングの基礎となる。
1.2 使用する道具
本資料では、Windowsに標準で搭載されているメモ帳と、無料で入手できるVisual Studio Build Toolsを用いる。これらにより、有償ツールを用いずにC言語プログラミングを行うことができる。
1.3 重要概念
本資料を読み進める前に、以下の用語を確認しておく。
- テキストエディタ(メモ帳): 文字を入力・編集するためのソフトウェア。本資料ではWindowsに標準で搭載されている「メモ帳」を用いてプログラムを記述する。
- ソースコード: 人間が読み書きするC言語のプログラム。本資料ではファイル名の末尾に「.c」を付けて保存する。
- コンパイル: ソースコードを機械語(CPUが実行できる形式)に変換する処理。C言語では実行前にこの変換が必要である。
- コンパイラ(cl): コンパイルを行うプログラム。本資料ではMicrosoft Visual C++のコンパイラ「cl」を用いる。
- コマンドプロンプト: 文字で命令を入力する画面。コンパイラのインストール、および作成したプログラムのコンパイル・実行に用いる。
- 拡張子(.c): ファイル名末尾の、ファイルの種類を表す部分。C言語のソースコードであることを示すために、保存時に「.c」を指定する。
- 実行ファイル(.exe): コンパイルによって生成される、直接実行可能なファイル。
1.4 コンパイルとは何か
C言語では、作成したソースコードをそのまま実行することはできない。実行する前に、ソースコードを機械語(CPUが実行できる形式)に変換する必要がある。この変換処理を「コンパイル」と呼ぶ。
本資料では「コンパイル」と総称するが、内部的には二つの段階に分かれる。一つはコンパイラによる機械語生成(オブジェクトファイル .obj の作成)であり、もう一つはリンカ(オブジェクトファイルを結合して実行ファイルを作るプログラム)による実行ファイル生成(.exe の作成)である。
1.5 作業全体の流れ
プログラムの作成から実行までは、次の手順で進む。ここでは流れの全体像を示すにとどめ、実際の操作は第4章以降で順を追って行う。この時点で手元のPCでコマンドを実行する必要はない。
- メモ帳でソースコードを作成し、ファイル名「hello.c」で保存する
- コマンドプロンプトで
cl hello.cを実行してコンパイルする(実行ファイル hello.exe が生成される) - コマンドプロンプトで
hello.exeを実行する
ソースコードを修正した場合は、再度コンパイルしてから実行する。なお、ここで用いている「hello.c」の具体的な中身は、第5章で作成する。
1.6 本資料の読み方
本資料は、第4章で開発環境を構築し、第5章でソースコードを作成、第6章でコンパイル・実行する流れで構成されている。第2章および第3章は概念とコード例の紹介であり、この時点で手元のPCでコマンドを実行する必要はない。
- 本資料の主たる学習対象は、Windowsの「メモ帳」と「Visual Studio Build Tools」を用いたローカル環境でのC言語プログラミングである。第4.1節で紹介するオンライン環境(Online GDB、C Tutor)は参考情報である。
- 前述のコンパイルの二段階(オブジェクトファイルの作成と実行ファイルの作成)のうち、第8.4節で扱うリンクエラーは、後者の実行ファイル生成の段階で発生するエラーである。
2. コンパイルとは何か
C言語では、実行前にソースコードを機械語(CPUが実行できる形式)に変換する。この変換処理を「コンパイル」と呼ぶ。
作業手順
- ソースコードを作成する(hello.c)
cl hello.cでコンパイルする(hello.exe が生成される)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節)であり、オンライン環境は参考として紹介する。
- Online GDB: https://www.onlinegdb.com/
- C Tutor: https://pythontutor.com/c.html
4.2 ローカル環境の構築
所要時間とディスク容量の目安:インストールには概ね30〜60分、ディスク容量は8〜10GB程度を要する。ネットワーク環境および端末性能により変動する。
- 管理者権限でコマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー →
cmdと入力 → 右クリック → 「管理者として実行」)。 - winget(Windowsに標準搭載されているパッケージ管理ツール。ソフトウェアのインストールや更新をコマンドで行う)が利用可能か確認する。
winget --version
- 以下のコマンドを、手順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 メモ帳の起動
- スタートメニュー(画面左下のWindowsマーク)をクリックする。
- 「メモ帳」と入力する。
- 「メモ帳」アプリが表示されるので、クリックして起動する。
5.2 プログラムの入力
第3章で示したプログラムを入力する(または貼り付ける)。
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
5.3 プログラムの保存
- 「ファイル」メニューから「名前を付けて保存」を選択する。
- 保存場所を選択する。本資料では「デスクトップ」を用いる。
- 画面下の「ファイルの種類」を「すべてのファイル(*.*)」に変更する。
- 初期設定の「テキスト文書(*.txt)」のままでは、ファイル名に自動的に「.txt」が追加され、「hello.c.txt」のようになる。これを防ぐため、「すべてのファイル(*.*)」に変更する。
- ファイル名を「○○○.c」と入力する。
- ○○○は任意の名前(例:hello)。
- .cはC言語のソースコードであることを示す拡張子(ファイル名末尾の、ファイルの種類を表す部分)である。
- 「エンコード」(または「文字コード」)で「UTF-8」を選択する。日本語を含まないソースコードであってもUTF-8で保存しておく。
- 「保存」をクリックする。
【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. キーボード入力のプログラム
キーボードから入力された文字のバイト数を数えるプログラムを作成する。
下記のソースコードでは、変数cをint型で宣言している。これは、入力の終わりを表す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' は内部コマンドまたは外部コマンド...」と表示される場合
- 通常のコマンドプロンプトではなく、「x64 Native Tools Command Prompt for VS 2022」を用いる必要がある。
- スタートメニューから「x64 Native Tools」と検索して起動する。
8.3 「No such file or directory」または「ファイルが見つかりません」と表示される場合
- cdコマンド(フォルダ間を移動する命令)でフォルダを正しく移動できていない可能性がある。
- 「dir」と入力してEnterを押すと、現在のフォルダの内容(ファイルやフォルダの一覧)を確認できる。
- 目的のファイル(例:hello.c)が表示されることを確認する。
- ファイル名の拡張子が「.c.txt」のようになっていないか確認する(保存時に「すべてのファイル」を選択していない場合に発生する)。エクスプローラで拡張子が非表示になっている場合は、エクスプローラの「表示」メニューから「ファイル名拡張子」を有効にすると確認しやすい。
8.4 リンクエラー(LNK2019, LNK1120など)
リンクエラーは、コンパイラが生成したオブジェクトファイル(.obj)から実行ファイル(.exe)を作るリンク段階で発生するエラーである。関数の呼び出しに対応する実体が見つからないときに生じる。
- 関数名のスペルミスがないか確認する。
- 必要なヘッダファイル(#include文)が記述されているか確認する。
8.5 「アクセスが拒否されました」と表示される場合
- 同名の実行ファイル(.exe)が実行中の場合に発生することがある。
- 実行中のプログラムを終了してから再度コンパイルする。
- 管理者権限でコマンドプロンプトを起動する方法もある(手順:Windowsキーまたはスタートメニュー →
cmdと入力 → 右クリック → 「管理者として実行」)。
8.6 文字化けが発生する場合
- ソースコード内に日本語を含む場合、文字コードの問題で文字化けやコンパイル時の警告(C4819など)が発生することがある。
- メモ帳で保存する際、保存ダイアログ下部の「エンコード」で「UTF-8」を選択する。
- 実行時にコマンドプロンプトの出力が文字化けする場合は、コマンドプロンプトで
chcp 65001を実行してコードページ(コマンドプロンプトが文字を解釈する際の文字コード設定)をUTF-8に切り替えてから、再度プログラムを実行する方法がある。
9. まとめ
| 項目 | 内容 |
|---|---|
| コンパイル | cl ファイル名.c |
| 実行 | ファイル名.exe |
| エラー対処 | エラーメッセージの行番号を確認して修正する |
| 入力終了 | Ctrl+Z → Enter(行の先頭で押す) |