UbuntuでC言語を始めるなら、まずコンパイラの導入と基本的な使い方を押さえることが大切です。
本記事ではUbuntuでのgccのインストール手順と、最初のCプログラム(Hello World)の作成から実行までを、初心者の方にも分かりやすく順を追って解説します。
Ubuntuでgccをインストールする手順
aptでbuild-essentialを入れる
Ubuntuでは、Cコンパイラのgccを含む開発ツール一式をbuild-essential
というメタパッケージでまとめて導入できます。
これはgcc、g++、make、標準的なヘッダやライブラリを含んでおり、C言語の学習を始めるには十分です。
インストール前にリポジトリ情報を更新してから導入します。
# パッケージリストを最新化
sudo apt update
# C/C++開発に必要な最小限のツールを一括インストール
sudo apt install -y build-essential
# (任意) デバッガやマニュアルもあると便利
sudo apt install -y gdb manpages-dev
上記コマンドは出力が長くなりますが、途中でSetting up ...
やProcessing triggers for ...
といった行が表示され、最後にプロンプトが戻れば成功です。
インストールの途中でパスワード入力を求められたら、Ubuntuユーザのパスワードを入力してください。
よく使う関連パッケージの役割
以下は、学習時に合わせて入れておくと便利なパッケージの例です。
パッケージ名 | 役割の概要 |
---|---|
build-essential | gcc/g++/makeなど開発の基本一式 |
gdb | C/C++プログラムのデバッガ |
manpages-dev | C標準ライブラリなどの開発向けマニュアル |
git | ソース管理(学習ノートやサンプルの履歴に便利) |
最初はbuild-essential
だけで十分ですが、デバッグやマニュアル参照をしたいタイミングでgdb
やmanpages-dev
を追加すると効率が上がります。
インストール時の注意
企業や学校のネットワークではプロキシ設定が必要な場合があります。
その際は/etc/apt/apt.conf
へのプロキシ設定や、環境変数http_proxy
、https_proxy
の設定を確認してください。
WSLのUbuntuでも同じ手順でインストールできます。
gccのバージョンを確認する
インストール後は、gccが正しく使えるかバージョン確認で確かめます。
合わせて、どこにインストールされたか(パス)も確認すると安心です。
# gccのバージョン確認
gcc --version
# 実行ファイルの場所を確認
which gcc
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) ...
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# どこにあるか
/usr/bin/gcc
表示されたバージョンが出ていればインストール成功です。
複数バージョンのgccが入っていて切り替えたいときはupdate-alternatives
が使えますが、初心者の方はまずデフォルトのgccで問題ありません。
Hello WorldのCファイルを作る
エディタを用意する(nanoなど)
最初はターミナルで使いやすいnano
エディタが簡単です。
インストールされていない場合は次のコマンドで導入します。
# nanoが未インストールなら導入
sudo apt install -y nano
# バージョン確認(任意)
nano --version
学習では「保存方法を迷わないエディタ」を選ぶとつまずきにくいです。
nanoの基本操作メモ
- 保存は
Ctrl + O
、Enterで確定、終了はCtrl + X
です。 - キー操作が画面下に表示されるので安心です。
hello.cを作成する
作業用ディレクトリを作り、そこにhello.c
を作成しましょう。
# 作業フォルダを作って移動
mkdir -p ~/c-tutorial/hello && cd ~/c-tutorial/hello
# hello.cを編集(新規作成)
nano hello.c
エディタが開いたら、次の内容を入力・保存します。
// hello.c - 最初のCプログラム: 画面にメッセージを表示します
// コンパイル方法: gcc hello.c -o hello
// 実行方法 : ./hello
#include <stdio.h> // printf関数の宣言があるヘッダを読み込む
int main(void) { // プログラムの入口となる関数(main)
// 画面に文字を表示します。末尾の \n は改行を意味します。
printf("Hello, World!\n");
return 0; // 正常終了を表す戻り値(0)
}
想定される実行結果:
Hello, World!
上のプログラムはC言語の最小構成で、#include
とmain
関数、printf
による出力の3点を確認できます。
gccでコンパイルする(基本)
単一ファイルをコンパイルする(gcc hello.c)
コンパイルとは、Cのソースコードを実行可能なプログラムに変換する操作です。
最もシンプルなコマンドは次の通りです。
# カレントディレクトリにhello.cがある前提
gcc hello.c
このコマンドが成功すると、デフォルト名a.out
の実行ファイルが生成されます。
名前が分かりづらいので、実務では次のように出力ファイル名を指定するのが一般的です。
コンパイル時のよくあるエラーと対処
症状(一部抜粋) | 原因 | 対処 |
---|---|---|
hello.c: No such file or directory | カレントディレクトリが違う、またはファイル名のタイプミス | ls でファイル確認、正しい場所に移動 |
implicit declaration of function ‘printf’ | #include <stdio.h> がない | ヘッダstdio.h をインクルード |
undefined reference to ‘…'(リンクエラー) | 追加のライブラリが必要 | 学習初期では稀。必要に応じ-lm などを指定 |
権限エラー(Permission denied) | 実行権がない/パス指定が誤り | gcc生成物は通常実行権あり。./a.out のように相対パスで実行 |
エラー文は必ず一行目から丁寧に読み、ファイル名・行番号・関数名を手掛かりに直すのが近道です。
出力ファイル名を指定する(-o hello)
出力ファイル名は-o
オプションで明示的に指定します。
あわせて警告を出しやすくする-Wall
や-Wextra
も有効化すると学習に役立ちます。
# 警告を有効にし、出力ファイル名をhelloに指定
gcc -Wall -Wextra hello.c -o hello
# 生成物を確認
ls -l hello
-rwxr-xr-x 1 yourname yourname 16784 Sep 26 12:34 hello
ファイルの先頭にx
(実行権)が含まれていれば、そのまま実行できます。
サイズや日付は環境により異なります。
より丁寧なコンパイル(最適化やデバッグ)
学習では必須ではありませんが、-O0
(最適化なし、デバッグしやすい)、-g
(デバッグ情報付与)を使うと、エラー原因の特定やデバッガ利用がスムーズです。
gcc -Wall -Wextra -O0 -g hello.c -o hello
LinuxでCプログラムを実行する
実行のしかた(./hello)
実行はカレントディレクトリを明示するため、ファイル名の前に./
を付けます。
これがないと、環境変数PATH
上のディレクトリしか検索されず、command not found
になります。
# 生成したプログラムを実行
./hello
Hello, World!
もしPermission denied
が出る場合は実行権を確認してください(通常gccの出力には実行権があります)。
念のため権限を付与するには次の通りです。
chmod +x hello
実行は「コンパイルが成功し、実行権があり、正しい場所(./)を指定」できれば確実に行えます。
実行とコンパイルを続けて行う
開発の流れを短くするには、&&
でコマンドを連結すると便利です。
gcc -Wall -Wextra hello.c -o hello && ./hello
画面出力を確認する(printf)
printf
は画面(標準出力)に文字を表示する基本関数で、最後に\n
(改行)を付けるのが習慣です。
改行を付けないと、バッファリングの影響で表示が遅れることがあります。
// printfの基本: 改行あり/なしの違いを見てみましょう
#include <stdio.h>
int main(void) {
printf("改行ありの行です。\n"); // すぐに表示されやすい
printf("改行なしの行です。"); // 場合によっては表示が遅れることがある
return 0;
}
改行ありの行です。
改行なしの行です.
実務では常に行末に\n
を付けるか、必要に応じてfflush(stdout);
で明示的にフラッシュします。
文字列に関する軽い注意
全角文字(日本語)を扱う際は、端末の文字コード(通常UTF-8)に揃えると文字化けを避けやすいです。
学習初期は英数字のみで始め、環境が整ってから日本語出力にトライするとスムーズです。
まとめ
Ubuntuではbuild-essential
を導入し、gcc --version
で確認、hello.c
を作ってgcc -o hello hello.c
でコンパイル、./hello
で実行という流れが基本です。
初心者の方はまずこの一連の操作を何度か繰り返し、コマンドの意味(更新・インストール・コンパイル・実行)とファイルの所在を身体で覚えるとつまずきにくくなります。
警告は-Wall -Wextra
で早めに気づけるようにし、エラーはメッセージを丁寧に読む癖を付けましょう。
次のステップとして、gdbによるデバッグや複数ファイルのコンパイルに進むと、より実践的なC言語の力が身に付きます。