LabEx で最初の C プログラムを作成する

CBeginner
オンラインで実践に進む

はじめに

この実験では、LabEx VM で最初の C プログラムを書いて実行する方法を学びます。最初は簡単な「Hello, World!」プログラムから始め、複数の print 文で出力を強化し、変数を使って出力をカスタマイズし、C 言語の文字列操作を調べ、最後に C プログラムをコンパイルしてデバッグする方法を学びます。

最初の C プログラムを書いて実行する

このステップでは、LabEx VM で最初の C プログラムを書いて実行します。簡単な「Hello, World!」プログラムを作成することで、C 言語プログラミングの基本構造を学びましょう。

WebIDE を開く

  1. LabEx インターフェイスの「WebIDE」タブ(デフォルト)をクリックして、VS Code のような環境を開きます。
  2. 左側のサイドバーのファイルエクスプローラで右クリックし、「新しいファイル」を選択します。
  3. ファイル名を hello.c とします。.c 拡張子はこれが C ソースコードファイルであることを示しています。

WebIDE インターフェイスのスクリーンショット

WebIDE について詳しく学びたい場合は、WebIDE ガイド をご覧ください。

最初の C プログラムを書く

次のコードをコピーして貼り付けて、hello.c ファイルに入力します:

#include <stdio.h>

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

このコードを解説しましょう:

  • #include <stdio.h>:標準入出力ライブラリを含める
  • int main() {... }:プログラム実行が始まる main 関数
  • printf("Hello, World!\n");:画面にテキストを表示する
  • \n:表示後に新しい行に移動する
  • return 0;:プログラムの正常終了を示す

プログラムをコンパイルして実行する

WebIDE のターミナルを開き、次のコマンドを実行します:

gcc hello.c -o hello
./hello

C プログラムを実行するターミナル

出力例:

Hello, World!

コマンドの説明

  • gcc hello.c -o hello:C ソースコードを hello という名前の実行可能ファイルにコンパイルする
  • ./hello:コンパイル済みのプログラムを実行する

複数の print 文で出力を強化する

このステップでは、複数の print 文を追加することで C プログラムを強化する方法を学びます。これにより、より複雑な出力を表示し、プログラムで複数行のテキストを使用する方法を理解できるようになります。

既存のプログラムを変更する

  1. 前のステップで作成した WebIDE 内の hello.c ファイルを開きます。
  2. 次のコードでファイルの内容を置き換えます:
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    printf("Welcome to C programming!\n");
    printf("This is your first multi-line program.\n");
    return 0;
}

コードの解説

  • さらに 2 つの printf 文を追加しました
  • printf は新しい行を作成するために \n で終わります
  • セミコロン (;) は各命令の終わりを示します

更新されたプログラムをコンパイルして実行する

WebIDE のターミナルを開き、次のコマンドを実行します:

gcc hello.c -o hello
./hello

出力例:

Hello, World!
Welcome to C programming!
This is your first multi-line program.

重要な観察結果

  • printf 文は別々の行に表示されます
  • \n により出力間に改行が確保されます
  • 必要に応じて任意の数の printf 文を追加できます

トラブルシューティングのヒント:

  • 各行が \n で終わることを確認します
  • printf 文がセミコロンで終わることを確認します
  • コンパイルする前にファイルを保存したことを確認します

変数を使って出力をカスタマイズする

このステップでは、C 言語で変数を使ってより動的でカスタマイズされた出力を作成する方法を学びます。変数を使うことで、プログラム内でデータを保存して操作することができます。

変数を使った新しい C プログラムを作成する

  1. WebIDE を開き、greeting.c という名前の新しいファイルを作成します。または、ターミナルで touch greeting.c と入力してファイルを作成することもできます。
  2. 次のコードを greeting.c ファイルに入力します:
#include <stdio.h>

int main() {
    char name[] = "LabEx";
    printf("Hello, %s!\n", name);
    printf("Welcome to C programming, %s!\n", name);
    return 0;
}

コードの解説

  • char name[] = "LabEx";name という名前の文字配列(文字列)変数を作成する
  • %s は、printf に文字列を挿入するように指示するフォーマット指定子です
  • フォーマット文字列の後の , name は、挿入する変数を指定します

プログラムをコンパイルして実行する

WebIDE のターミナルを開き、次のコマンドを実行します:

gcc greeting.c -o greeting
./greeting

出力例:

Hello, LabEx!
Welcome to C programming, LabEx!

変数を試す

name 変数を自分の名前に変更してみましょう:

char name[] = "Your Name";

コンパイルして実行して、カスタマイズされた出力を確認します。

トラブルシューティングのヒント:

  • printf で変数を使用する前に、変数が定義されていることを確認します
  • コンパイルする前にファイルを保存したことを確認します
  • 変数名が正しくスペルされていることを確認します

C 言語における文字列操作を学ぶ

このステップでは、C 言語における基本的な文字列操作技術を学びます。文字列の連結や、標準ライブラリからの文字列関連関数の使用などが含まれます。

文字列操作プログラムを作成する

  1. WebIDE を開き、strings.c という名前の新しいファイルを作成します。
  2. 次のコードを入力します:
#include <stdio.h>
#include <string.h>

int main() {
    char first_name[] = "Lab";
    char last_name[] = "Ex";
    char full_name[20];

    // 文字列を連結する
    strcpy(full_name, first_name);
    strcat(full_name, " ");
    strcat(full_name, last_name);

    // 文字列の長さと連結された名前を表示する
    printf("First name length: %lu\n", strlen(first_name));
    printf("Last name length: %lu\n", strlen(last_name));
    printf("Full name: %s\n", full_name);

    return 0;
}

コードの解説

  • #include <string.h>:文字列操作関数を含める
  • strcpy():文字列を別の文字列にコピーする
  • strcat():2 つの文字列を連結する
  • strlen():文字列の長さを返す
  • %lu:符号なしの長整数用のフォーマット指定子(文字列の長さに使用)

プログラムをコンパイルして実行する

WebIDE のターミナルを開き、次のコマンドを実行します:

gcc strings.c -o strings
./strings

出力例:

First name length: 3
Last name length: 2
Full name: Lab Ex

文字列操作技術

示された重要な文字列操作:

  • 文字配列の作成
  • strcpy() を使った文字列のコピー
  • strcat() を使った文字列の結合
  • strlen() を使った文字列の長さの取得

トラブルシューティングのヒント:

  • 目的の文字列に十分な空間があることを確認する
  • 文字列関数を使用するには常に <string.h> を含める
  • 文字列バッファのサイズに注意してオーバーフローを防ぐ

C プログラムをコンパイルしてデバッグする

このステップでは、C プログラムの必須のコンパイルとデバッグ技術を学びます。コンパイラの警告の理解、コンパイルフラグの使用、基本的なデバッグ戦略などが含まれます。

意図的なエラーを含むプログラムを作成する

  1. WebIDE を開き、debug.c という名前の新しいファイルを作成します。
  2. 次のように意図的なエラーを含むコードを入力します:
#include <stdio.h>

int main() {
    int x = 10;
    int y = 0;

    // 意図的なゼロ除算
    int result = x / y;

    printf("Result: %d\n", result);

    // 未使用の変数
    int z = 5;

    return 0;
}

警告付きでコンパイルする

追加の警告フラグ付きでプログラムをコンパイルします:

gcc -Wall -Wextra debug.c -o debug

コンパイルフラグの解説

  • -Wall:ほとんどの警告メッセージを有効にする
  • -Wextra:さらに詳細な警告を有効にする

コンパイラの出力例:

debug.c: In function ‘main’:
debug.c:13:9: warning: unused variable ‘z’ [-Wunused-variable]
   13 |     int z = 5;
      |         ^

GDB を使ったデバッグ

デバッグシンボル付きでコンパイルします:

gcc -g debug.c -o debug

デバッグを開始します:

gdb./debug

GDB コマンド:

  • run:プログラムを起動する
  • break main:main 関数にブレークポイントを設定する
  • print x:変数 x の値を表示する
  • next:次の行を実行する
  • quit:GDB を終了する
(gdb) run
Starting program: /home/labex/project/debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGFPE, Arithmetic exception.
0x0000555555555167 in main () at debug.c:8
8           int result = x / y;
(gdb) print x
$1 = 10
(gdb) break main
Breakpoint 1 at 0x555555555155: file debug.c, line 4.
(gdb) next

Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
(gdb) quit

GDB は 8 行目でゼロ除算エラーを表示します。プログラムは算術例外のためクラッシュします。

プログラムを修正する

debug.c を修正して、セーフな除算を行うようにします:

#include <stdio.h>

int main() {
    int x = 10;
    int y = 2;  // 0 から非ゼロの値に変更

    if (y!= 0) {
        int result = x / y;
        printf("Result: %d\n", result);
    } else {
        printf("Error: Division by zero!\n");
    }

    return 0;
}

再コンパイルして実行します:

gcc -Wall -Wextra debug.c -o debug
./debug

出力:

Result: 5

トラブルシューティングのヒント:

  • 常に -Wall -Wextra でコンパイルする
  • コンパイラの警告に注意する
  • 複雑なデバッグシナリオでは GDB を使用する
  • 潜在的なランタイムの問題に対してエラーチェックを追加する

まとめ

この実験では、最初の C プログラムを書いて実行する方法、複数の print 文を使って出力を強化する方法、変数を使って出力をカスタマイズする方法、C 言語における文字列操作を学び、C プログラムをコンパイルしてデバッグする方法を学びました。C 言語の基本構造に関する実践的な経験を得ました。これには、ライブラリの含め方、main 関数の定義、出力を表示するための printf() の使用、プログラムのコンパイルと実行などが含まれます。また、複数の print 文の使用や変数と文字列を扱うなどの高度な概念にも触れました。