Windows環境でのC言語:プログラムの作成から実行まで
| 項目 | 内容 |
|---|---|
| 対象読者 | C言語を初めて学ぶ学生。Windowsの標準機能(メモ帳)を用いてC言語プログラミングの基礎を学習する者。 |
| 前提条件 | Windowsの基本操作(ファイル作成、コマンドプロンプトの起動)ができること |
| 学習目標 | C言語のソースコードをコンパイルして実行できる。標準入力からデータを読み取るプログラムを作成できる。 |
【重要概念】
- テキストエディタ(メモ帳): 文字を入力・編集するためのソフトウェア。本資料ではWindowsに標準で搭載されている「メモ帳」を用いてプログラムを記述する。
- コンパイル: ソースコード(人間が読み書きするプログラム)を機械語(CPUが実行できる形式)に変換する処理。C言語では実行前にこの変換が必要である。
- コンパイラ(cl): コンパイルを行うプログラム。本資料ではMicrosoft Visual C++のコンパイラ「cl」を用いる。
- コマンドプロンプト: 文字で命令を入力する画面。コンパイラのインストール、および作成したプログラムのコンパイル・実行に用いる。
- 拡張子 (.c): ファイルの種類を表す部分(ファイル名の末尾)。C言語のソースコードであることを示すために、保存時に「.c」を指定する。
- 実行ファイル (.exe): コンパイルによって生成される、直接実行可能なファイル。
【目次】
1. はじめに
本資料では、C言語のプログラムをWindows環境で作成し、実行する方法を学ぶ。
- C言語のソースコードをコンパイルし、実行ファイル(.exe)を生成する
- キーボードから入力された文字のバイト数を数えるプログラムを作成する
本資料で用いるのは、Windowsに標準で搭載されているメモ帳と、無料で入手できるVisual Studio Build Toolsである。これらにより、追加の有償ツールを用いずにC言語プログラミングを行うことができる。
本資料では、文字列を出力する「Hello, World!」プログラムと、キーボードからの入力を処理するプログラムを扱う。ここで学ぶメモ帳の操作、ならびにプログラムのコンパイルおよび実行の手順は、C言語プログラミングの基礎となる。
2. コンパイルとは何か
C言語では、実行前にソースコードを機械語(CPUが実行できる形式)に変換する。この変換処理を「コンパイル」と呼ぶ。
作業手順
- ソースコードを作成する(hello.c)
cl hello.cでコンパイルする → hello.exe が生成されるhello.exeで実行する
ソースコードを修正した場合は、再度コンパイルしてから実行する。
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 という名前で保存する。
4. 開発環境の準備
4.1 オンライン環境
インストールを行わずに、ブラウザ上でコンパイルと実行ができる。
- Online GDB: https://www.onlinegdb.com/
- C Tutor: https://pythontutor.com/c.html
アルゴリズムとデータ構造のデモサイトとして、VisuAlgo がある。
- VisuAlgo のURL:https://visualgo.net
4.2 ローカル環境の構築
- Windowsで、管理者権限でコマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー →
cmdと入力 → 右クリック → 「管理者として実行」)。 - winget(Windowsパッケージマネージャー)が利用可能か確認する。
winget --version
- 以下のコマンドを管理者権限のコマンドプロンプトで実行する
(手順:Windowsキーまたはスタートメニュー →
cmdと入力 → 右クリック → 「管理者として実行」)。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"--addで追加されるコンポーネント上記のコマンドでは、まず VC++ ランタイム(Visual C++ 再頒布可能パッケージ)をインストールし、続いて Build Tools 本体と以下のコンポーネントを
--overrideオプションにより一括して追加する。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」を検索し、起動できることを確認する。
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言語のソースコードであることを示す拡張子(ファイルの種類を表す部分)である。この拡張子により、ファイルがC言語のソースコードとして認識される。
- 「保存」をクリックする。
6. コンパイルと実行
6.1 開発者コマンドプロンプトの起動
スタートメニューから「x64 Native Tools Command Prompt for VS 2022」を選択する。
6.2 ソースコードのあるフォルダへ移動
cdコマンド(フォルダ間を移動する命令)を用いる。デスクトップに保存した場合は、以下のように入力する。
cd /d c:%HOMEPATH%\Desktop
または、ユーザー名を直接指定する場合は以下のとおりである。
cd C:\Users\ユーザー名\Desktop
フォルダ名にスペースや日本語が含まれる場合は、「"」で囲む。例:
cd "C:\Users\ユーザー名\Desktop\C言語練習"
6.3 コンパイル
cl hello.c
/out:hello.exe が表示されればコンパイル成功である。error が表示された場合はソースコードに誤りがある。
6.4 実行
hello.exe
Hello, World! が表示されれば実行成功である。
プログラム名は作成時に付けた名前を用いる。大文字と小文字は区別されるため注意が必要である(「Hello.c」と「hello.c」は異なるファイルとして扱われる)。
7. キーボード入力のプログラム
キーボードから入力された文字のバイト数を数えるプログラムを作成する。
#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; |
読み取った文字を格納する変数 |
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 を押す。
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を押すと、現在のフォルダの内容を確認できる。
- dirコマンド(ディレクトリ内容表示命令)は、現在のフォルダに保存されているファイルやフォルダの一覧を表示する。
- 目的のファイル(例:hello.c)が表示されることを確認する。
- ファイル名の拡張子が「.c.txt」のようになっていないか確認する(保存時に「すべてのファイル」を選択していない場合に発生する)。
8.4 リンクエラー(LNK2019, LNK1120など)
- 関数名のスペルミスがないか確認する。
- 必要なヘッダファイル(#include文)が記述されているか確認する。
8.5 「アクセスが拒否されました」と表示される場合
- 同名の実行ファイル(.exe)が実行中の場合に発生することがある。
- 実行中のプログラムを終了してから再度コンパイルする。
- 開発者コマンドプロンプトを管理者として実行する方法もある。
8.6 文字化けが発生する場合
- ソースコード内に日本語を含む場合、文字コードの問題で文字化けが発生することがある。
- メモ帳で保存する際に、文字コードを「UTF-8」に設定する。
9. まとめ
| 項目 | 内容 |
|---|---|
| コンパイル | cl ファイル名.c |
| 実行 | ファイル名.exe |
| エラー対処 | エラーメッセージの行番号を確認して修正する |
| 入力終了 | Ctrl+Z → Enter |