🏗

Chromebookで環境構築:C言語

2024/11/30に公開

はじめに

本記事では、Chromebook で C 言語の開発環境を作る過程を説明します。VSCode の拡張機能を使いつつ、なるべく手軽に導入できる方向を目指します。

前提となる条件

本記事は、Chromebook に Linux 開発環境が構築済みであることが前提となります。また Linux 側で VSCode がインストールされた状態で、日本語化や GitHub との連携といった諸々の設定が済んだ状態を想定し、話を進めていきます。

なお本記事は 2024年 11月に作成したものです。ChromeOS のバージョンは 131.0.6778.96(Official Build)(64 ビット)、VSCode のバージョンは 1.95.3 となります。

導入手順

ここからは C 言語の開発環境を作っていく手順を説明していきます。ここで使っているスクリーンショットは、Linux 開発環境を新規に作り最低限の設定のみ整えた状態で撮ったものとなります。

環境構築の手順としては、下記のような流れとなります。

  1. 拡張機能のインストール
  2. コンパイラのインストール

拡張機能のインストール

拡張機能タブの検索欄に c/c++ と入力すると、結果一覧に Microsoft の C/C++ 及び C/C++ Extension Packが見つかります。拡張パック側で「インストール」ボタンを押すと、 C/C++ 含め必要となる諸々の拡張機能とセットでインストールされます。

VSCodeの検索結果画面。検索結果最上段にMicrosoftの提供する拡張機能が掲載されている。こちらは C/C++ という拡張機能名で、インテリセンスやデバッグ、コードブラウジングのための機能を提供する
C/C++

上図に対し、こちらは拡張パックの拡張機能。この機能のインストールには、追加で複数の拡張機能がパックとしてインストールされることが記されている
C/C++ Extension Pack

環境構築の手順画面

インストールが完了すると、下図の画面が表示されます。C++ の開発環境を構築する手順や確認方法が紹介されており、「まず最初に GCC コンパイラ をインストールしてください」と促されています。

拡張機能のインストール後に画面遷移した状態。C++ の開発環境を整えるための手順やコマンド等が説明されている

上記画像のテキスト版

C++環境のセットアップ
C++ 拡張機能は C++ コンパイラとの組み合わせで動作します。下のボタンをクリックして、このマシンにインストールされているコンパイラの内 1 つを選択してください

C++ ファイルの作成
開く または 作成 C++ ファイル。"helloworld.cpp" などの ".cpp" 拡張子を使用して保存してください。

お使いの C++ ファイルを実行してデバッグする
C++ ファイルを開いてエディターの右上隅にある「再生」ボタンをクリックするか、ファイル上で F5 キーを押します。デバッガーで実行するには、「g++ - アクティブファイルのビルドとデバッグ」を選択します。

デバッグのカスタマイズ
デバッグ構成をカスタマイズするには、アクティビティバーでエクスプローラーを選択肢、C++ ファイルを含むフォルダーを開きます。C++ ファイルを開き、「再生」ボタンの右側にある「デバッグ構成の追加」を選択します。新しいデバッグ構成は、プロジェクトの launch.json ファイルに保存されます。

Linux で C++ コンパイラをインストールする
Linux に C++ の開発を行う場合は、GCC コンパイラのインストールをお勧めします。GCC のインストールは簡単で、以下の 3 つの手順に従うだけです。

ターミナル ウィンドウで次のコマンドを実行すると、Ubuntu のパッケージ リストが更新されます。Linux ディストリビューションが以前のバージョンである場合は、新しいパッケージのインストールに支障をきたす場合があります。

sudo apt update

以下のコマンドを使用して、GNU コンパイラ ツールと GDB デバッガーをインストールします。

sudo apt install build-essential gdb

次のコマンドを実行して、GCC がインストールされていることを確認します。著作権に関するメッセージと、使用している GCC のバージョンに関する情報が表示されます。

gcc --version

『Walkthrough: C/C++』より抜粋

コンパイラ未インストール時の挙動

現段階(拡張機能のインストール)では、まだ GCC コンパイラがインストールされていない状態です。この時点で C 言語のファイルを作成した場合、どうなるかを試してみます。

まずは拡張子 .c でファイルを作成し、コードを書いていきます。下記にあるコードは「西暦を入力要求して和暦に変換して返す、この一連の流れを 0 が入力されるまで続ける」ことを目的としたものとなります。

西暦和暦変換
/**
 * 本コードは『Cの絵本 第二版』(著者:株式会社アンク)にある
 * サンプルプログラム(P99) をベースにしたものとなります。
 */

#include <stdio.h>
#include <string.h>

int convWareki(int, char *, int *);  // プロトタイプ宣言

int main(void){
  int year = -1;
  int wareki = 0;
  char nengou[16];

  printf("和暦変換を行います、終了するには 0 を入力してください。\n");
  while(year != 0){
    printf("西暦を入力してください(1868年以降):");
    scanf("%d", &year);

    // 関数が適切に処理できた場合、計算結果を出力
    if(convWareki(year, nengou, &wareki) == 0){
      printf("西暦 : %d年 -> %s : %d年\n", year, nengou, wareki);
    }
  }
  return 0;
}

int convWareki(int year, char *nengou, int *wakeki){
  const int meiji = 1868;
  const int taisyo = 1912;
  const int syowa = 1926;
  const int heisei = 1989;
  const int reiwa = 2019;

  if(year < meiji){
    return 1;  // 明治以前
  } else if(year < taisyo) {
    strcpy(nengou, "明治");
    *wakeki = year - meiji + 1;
  } else if(year < syowa){
    strcpy(nengou, "大正");
    *wakeki = year - taisyo + 1;
  } else if(year < heisei){
    strcpy(nengou, "昭和");
    *wakeki = year - syowa + 1;
  } else if(year < reiwa){
    strcpy(nengou, "平成");
    *wakeki = year - heisei + 1;
  } else {
    strcpy(nengou, "令和");
    *wakeki = year - reiwa + 1;
  }
  return 0;
}

下図はコードを作成した段階です。下記の問題が生じていることがわかります。

  1. include 文でエラーを出している
  2. 画面右下に、黄色で注意を表す「⚠」マーク(インテリセンス機能の問題)が出ている

前述したコードを入力した段階、先ほど説明した2つの問題が起こっている

include文のエラー

このコードでは最初の方で、入出力や文字列操作のために #include <stdio.h>, #include <string.h> で標準 C ライブラリを参照するようにしています。上図は その include 文の箇所でエラーを出している状態となります。

エラー内容を見てみると、下記のようにインテリセンス構成で問題がおきていることがわかります。

#include エラーが検出されました。includePath を更新してください。この翻訳単位 (/home/username/sample-c/sample.c) では、波線が無効になっています。C/C++(1696)

ソース ファイルを開けません "stdio.h". システム ヘッダーを見つけるには、'IntelliSense 構成の選択...' コマンドを実行してください。C/C++(1696)

ソース ファイルを開けません "string.h". システム ヘッダーを見つけるには、'IntelliSense 構成の選択...' コマンドを実行してください。C/C++(1696)

インテリセンス機能の問題

また上図では右下に注意マークを表示しています。これはインテリセンス構成の問題(コンパイラがないので、どのようにインテリセンス構成をすればいいか不明)を表しています。試しにクリックすると、下図のように構成方法を尋ねられます。

入力欄のラベルに「このフォルダのインテリセンスをどのように構成しますか?」と尋ねられている。選択肢として3つ提示されており、コンパイラを手動指定する、新規にインストールする、コンパイラ構成なしで動かす、がある

コンパイラのインストール

C 言語での開発にはコンパイラが必要であることが確認できました。ここからは環境構築の手順画面で提示された流れに沿って、コンパイラをインストールします。

必要なパッケージをインストールには apt install を使います。

各種インストール
username@penguin:~$ sudo apt install build-essential gdb

gbd(GNU Debugger)は C/C++ 用のソースコードのデバッガーです。build-essential は開発に必要となる諸ツールがまとまったもので、例えば下表のパッケージが含まれています。

パッケージ名 説明
gcc GNU C コンパイラ
g++ GNU C++ コンパイラ
cpp GNU C プリプロセッサ
make コンパイルを制御するユーティリティ
dpkg-dev Debian パッケージ開発ツール

インストールが完了すれば、C 言語の開発環境は整いました。

インストールの確認

環境が整ったので、ここでは確認をしていきます。

ターミナルでコンパイラを確認

まずはターミナルを起動し、コンパイラ gcc が存在しているかを確認してみます。

コンパイラの確認
username@penguin:~$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

プログラムの実行

次に作成済みの C 言語ファイルを選択し、「C/C++ ファイルの実行」を行ってみます。すると下図のように使用するコンパイラを聞かれるので、gcc を選択します。

入力欄のラベルに「デバッグ構成を選択する」と尋ねられている。選択肢として3つ提示されており、gcc, gcc-12, gbd起動、がある

選択すると、コンパイル等をスキャンしつつビルドが進んでいきます。下図ではビルドが完了し、同フォルダ内にコンパイルされたプログラムが生成されていることが確認できます。

ターミナルタブではビルド完了までの一連の流れがログとして表示されている。エクスプローラーではビルドが完了し、コンパイルされたファイルが新規に生成されている

デバッグを試してみたのが下図となります。デバッガが起動しコードが問題なく動作していることが確認できます。

C/C++ファイルのデバッグを実行した状態。ターミナルタブでソースコードが問題なく動作し、西暦入力と和暦出力が適切に行われていることが確認できる

まとめ

本記事では Chromebook 上に立てた Linux 開発環境で、VSCode の拡張機能を使いつつ C 言語の開発環境を構築する流れについて説明しました。

参考文献

本記事で扱ったコードは、下記を参考にしています。

https://www.shoeisha.co.jp/book/detail/9784798150383

Discussion