C言語GUI入門|コンソールアプリとGUIアプリの違い

C言語で作成できるアプリケーションは、大きくコンソールアプリとGUIアプリに分けて考えることができます。

コンソールアプリは、文字を中心としたコンソール画面に処理結果を表示するアプリケーションです。処理はプログラムに書かれた順番に進み、必要に応じてキーボードから入力を受け取ります。

一方、GUIアプリは、ウィンドウ、ボタン、入力欄などを画面に表示するアプリケーションです。ウィンドウを表示した後もすぐには終了せず、ボタンのクリックやキーボードからの入力など、ユーザーの操作を待ち続けます。

この記事では、コンソールアプリとGUIアプリの画面、操作方法、処理の進み方を比較します。第1章ではまだ具体的なプログラムを作成せず、それぞれの動作をイメージしながら違いを理解していきましょう。

コンソールアプリとは

コンソールアプリとは、コンソール画面を使ってユーザーと情報をやり取りするアプリケーションです。

コンソール画面には、文字や数値を表示できます。また、キーボードから入力された文字や数値を受け取ることもできます。

Windowsでは、次のような画面でコンソールアプリを実行します。

  • コマンドプロンプト
  • PowerShell
  • Windows Terminal
  • MSYS2 UCRT64ターミナル
  • Visual Studio Codeの統合ターミナル

本コンテンツでは、MSYS2 UCRT64ターミナルやVisual Studio Codeの統合ターミナルを使用します。

コンソールアプリでは、プログラムの実行結果が基本的に文字として表示されます。たとえば、2つの数値を計算するコンソールアプリなら、次のような流れで動作します。

  1. プログラムを起動する
  2. 1つ目の数値の入力を求める
  3. ユーザーがキーボードから数値を入力する
  4. 2つ目の数値の入力を求める
  5. ユーザーがキーボードから数値を入力する
  6. 計算を行う
  7. 計算結果を文字として表示する
  8. プログラムを終了する

コンソールアプリでは、何を入力すればよいのかを文章で案内し、入力された内容に応じて処理を進めます。

図1:コンソールアプリとGUIアプリの画面の違い

この図から分かること

コンソールアプリは、文字を使ってユーザーに情報を伝えます。ユーザーから情報を受け取る場合も、基本的にはキーボードから文字や数値を入力してもらいます。

GUIアプリでは、ウィンドウの中に入力欄やボタンなどを配置できます。ユーザーは入力欄に数値を入力し、目的のボタンをクリックして処理を実行します。

同じ計算を行うアプリケーションでも、画面の見せ方と操作方法には大きな違いがあります。

コンソール画面に結果を表示するプログラム

コンソールアプリでは、プログラムから出力された文字がコンソール画面に順番に表示されます。

たとえば、計算結果、処理の進行状況、エラーメッセージなどを文字で確認できます。

コンソールアプリが得意とするのは、次のような処理です。

  • 数値を計算して結果を表示する
  • 入力された文字列を加工する
  • ファイルの内容を読み書きする
  • 大量のデータを順番に処理する
  • システムの状態を文字で表示する
  • ほかのプログラムから受け取った情報を処理する
  • 同じ処理を自動的に繰り返す

文字だけで結果を確認できる処理では、複雑な画面を作る必要がありません。そのため、コンソールアプリは比較的シンプルな構造で作成できます。

コンソールアプリの長所

コンソールアプリには、次のような長所があります。

  • 画面を作るための処理が少ない
  • C言語の基本的な文法を学びやすい
  • 処理の流れを追いやすい
  • キーボードだけで操作できる
  • 自動処理に利用しやすい
  • 処理結果やエラーを確認しやすい
  • GUIが利用できない環境でも動かしやすい

C言語の学習では、最初にコンソールアプリを作ることが一般的です。変数、条件分岐、繰り返し、関数、配列など、C言語の基本を確認するために、コンソール画面はとても便利です。

本コンテンツでも、第3章でコンソールプログラムを作成し、ソースファイルの作成、コンパイル、実行という基本的な流れを確認します。

コンソールアプリで注意すること

コンソールアプリは文字を中心に操作するため、ユーザーが入力方法を理解している必要があります。

たとえば、ユーザーに数値を入力してもらう場合は、何を入力するのかを文章で分かりやすく案内しなければなりません。

入力された内容に誤りがある場合も、次に何をすればよいのかをエラーメッセージで伝える必要があります。

また、画像を表示したり、複数のボタンを並べたり、マウスで項目を選んだりするような操作には向いていません。

GUIアプリとは

GUIアプリとは、ウィンドウ、ボタン、入力欄、メニューなどの画面部品を使って操作するアプリケーションです。

GUIは、Graphical User Interfaceの略です。ユーザーは画面に表示された情報を見ながら、マウスやキーボードを使って操作できます。

たとえば、GUI電卓では次のように操作します。

  1. GUI電卓を起動する
  2. 電卓のウィンドウが表示される
  3. ユーザーが入力欄に数値を入力する
  4. ユーザーが計算ボタンをクリックする
  5. アプリケーションが計算する
  6. 計算結果がウィンドウ内に表示される
  7. アプリケーションは次の操作を待つ
  8. ユーザーが閉じるボタンを押す
  9. アプリケーションが終了する

計算結果を表示した後も、GUIアプリはすぐには終了しません。ユーザーが別の数値を入力したり、ほかのボタンをクリックしたりできるように、次の操作を待ちます。

GUIアプリの長所

GUIアプリには、次のような長所があります。

  • 画面を見ながら操作できる
  • ボタンの名前から機能を予想しやすい
  • マウスで目的の項目を選べる
  • 文字、画像、色などを使って情報を表現できる
  • 入力欄やメニューを使って機能を整理できる
  • 処理結果を画面の決まった場所に表示できる
  • アプリケーションの状態を視覚的に確認できる

GUIアプリでは、ユーザーが次に何をすればよいのかを画面で示せます。たとえば、計算を始める場所には計算ボタンを置き、数値を入力する場所には入力欄を置きます。

このように、部品の形や配置によって操作方法を伝えられることがGUIの大きな利点です。

GUIアプリで必要になること

GUIアプリでは、計算や文字列処理などの本来の処理だけでなく、画面に関する処理も必要になります。

  • ウィンドウを作成する
  • ウィンドウの大きさを決める
  • ボタンや入力欄を作成する
  • 画面上に部品を配置する
  • ボタンが押されたときの処理を用意する
  • 入力された文字列を取得する
  • 処理結果を画面に表示する
  • ウィンドウが閉じられたときに終了する

C言語の標準機能だけでは、このようなGUI画面を簡単に作成できません。そのため、本コンテンツではGTK 4というGUIライブラリを利用します。

コンソールアプリとGUIアプリの主な違い

コンソールアプリとGUIアプリの違いを整理すると、次のようになります。

比較項目コンソールアプリGUIアプリ
主な画面コンソール画面ウィンドウ
情報の表示文字や数値を順番に表示する文字、ボタン、入力欄、画像などを配置する
主な入力方法キーボードマウス、キーボード
操作の案内文章で入力方法を示す部品の形、名前、配置で示す
処理の開始起動後に順番に進むことが多いユーザーの操作をきっかけに進むことが多い
処理後の動作結果を表示して終了することが多い結果を表示して次の操作を待つ
画面作成比較的少ないウィンドウや部品の作成が必要
主な用途学習、計算、自動処理、管理ツール電卓、エディター、ゲーム、業務アプリ
C言語での作り方標準ライブラリを中心に作成できるGUIライブラリなどを利用する

ただし、コンソールアプリは必ずキーボードだけで操作し、GUIアプリは必ずマウスで操作するという意味ではありません。

コンソールアプリでもユーザーからの入力を待つことがあります。GUIアプリでもキーボードだけで操作できる場合があります。違いを理解するときは、画面の種類だけでなく、処理がどのようなきっかけで進むのかにも注目することが大切です。

上から順番に実行する処理

C言語のプログラムでは、基本的に書かれている文を上から順番に実行します。

単純なコンソールアプリでは、処理の始まりから終わりまでの流れが分かりやすくなっています。

たとえば、2つの数値を足し算するコンソールアプリの処理は、次のように考えられます。

プログラムを開始する
        ↓
1つ目の数値を受け取る
        ↓
2つ目の数値を受け取る
        ↓
2つの数値を足し算する
        ↓
計算結果を表示する
        ↓
プログラムを終了する

このような処理は、順次処理と呼ばれます。

実際のプログラムでは、条件分岐や繰り返しによって進む順番が変わることがあります。それでも、現在実行している処理が終わると、次に実行する文へ進むという基本は変わりません。

コンソールアプリの処理を追いやすい理由

コンソールアプリでは、プログラムが開始してから終了するまでの道筋が比較的はっきりしています。

初心者がC言語を学ぶときは、次のような考え方で処理を確認できます。

  • 最初に何を行うのか
  • 次に何を行うのか
  • どこで入力を受け取るのか
  • どこで計算するのか
  • どこで結果を表示するのか
  • どこでプログラムが終了するのか

この順番を追うことで、プログラム全体の動作を理解できます。

図2:上から順番に進むコンソールアプリ

この図から分かること

単純なコンソールアプリでは、開始、入力、計算、結果の表示、終了という流れに沿って処理が進みます。

ユーザーからの入力が必要な場合は、その場所で入力を待ちます。入力を受け取ると次の処理へ進み、最後の処理が終わるとアプリケーションも終了します。

このような流れは処理の開始地点と終了地点が分かりやすいため、C言語の基本を学ぶのに適しています。

ユーザーの操作を待つ処理

GUIアプリでは、ウィンドウを表示した後、ユーザーが何をするかを待ちます。

ユーザーは、次のような操作を行う可能性があります。

  • ボタンをクリックする
  • 入力欄に文字を入力する
  • メニューから機能を選ぶ
  • Enterキーを押す
  • ウィンドウの大きさを変更する
  • ウィンドウを閉じる

GUIアプリは、ユーザーが次にどの操作を行うのかをあらかじめ決めることができません。

たとえば、GUI電卓を起動したユーザーが最初に行う操作には、いくつかの可能性があります。

  • 1つ目の入力欄に数値を入力する
  • 2つ目の入力欄に数値を入力する
  • 計算ボタンを押す
  • 入力内容を消去する
  • 何も操作せずにウィンドウを閉じる

そのため、GUIアプリではプログラム側が操作順序を完全に決めるのではなく、ユーザーの操作に合わせて処理を切り替えます。

イベントとは

ボタンのクリックやキーボードからの入力など、アプリケーションに伝えられる出来事をイベントと呼びます。

代表的なイベントには、次のようなものがあります。

イベントのきっかけGUIアプリの反応例
ボタンがクリックされた計算や保存を実行する
入力欄に文字が入力された入力内容を画面に表示する
Enterキーが押された入力を確定する
メニュー項目が選択された選択された機能を実行する
ウィンドウが閉じられた終了処理を行う
ウィンドウの大きさが変わった部品の配置を調整する

GUIアプリはイベントが発生するまで待機し、イベントが発生したら対応する処理を実行します。その処理が終わると、再び次のイベントを待ちます。

GUIアプリは待っている間も動いている

GUIアプリがユーザーの操作を待っている間、プログラムが終了しているわけではありません。

ウィンドウを画面に表示したまま、マウスやキーボードからの操作が届くのを待っています。

この状態では、オペレーティングシステムとGUIライブラリが連携し、ユーザーの操作をアプリケーションへ伝えます。

GUIアプリの基本的な流れは、次のように考えられます。

GUIアプリを開始する
        ↓
ウィンドウを表示する
        ↓
ユーザーの操作を待つ
        ↓
操作に対応する処理を実行する
        ↓
画面を更新する
        ↓
次の操作を待つ

ウィンドウを閉じる操作が行われるまで、操作を待つ処理と、操作に対応する処理が繰り返されます。

図3:ユーザーの操作を待つGUIアプリ

この図から分かること

GUIアプリでは、ウィンドウを表示した後にユーザーの操作を待ちます。操作が行われると、その操作に対応する処理を実行し、必要に応じて画面を更新します。

処理が終わると、アプリケーションは終了せずに次の操作を待ちます。この流れは、ユーザーがウィンドウを閉じるまで繰り返されます。

コンソールアプリのように一直線に終了へ向かうのではなく、待機と処理を何度も繰り返す点がGUIアプリの大きな特徴です。

GUIアプリでも処理は上から順番に実行される

コンソールアプリは上から順番に実行され、GUIアプリは順番に実行されない、と考えてしまうことがあります。しかし、これは正確ではありません。

GUIアプリでも、1つ1つの処理は基本的に上から順番に実行されます。

たとえば、計算ボタンがクリックされたときに行う処理は、次のような順番になります。

  1. 1つ目の入力欄から文字列を取得する
  2. 2つ目の入力欄から文字列を取得する
  3. 取得した文字列を数値へ変換する
  4. 2つの数値を計算する
  5. 計算結果を画面に表示する

この部分だけを見ると、コンソールアプリと同じように上から順番に処理が進んでいます。

違いは、処理をいつ開始するかです。

コンソールアプリでは、プログラムの起動後に処理が順番に始まることが多くあります。GUIアプリでは、ボタンのクリックなどのイベントが発生したときに、対応する処理が始まります。

見るポイントコンソールアプリGUIアプリ
処理を始める主なきっかけプログラムの起動や入力の完了ボタンのクリックなどのイベント
1つの処理の進み方上から順番に進む上から順番に進む
処理が終わった後次の処理へ進むか終了する次のイベントを待つ
全体の流れ開始から終了へ進みやすい待機と処理を繰り返す

GUIプログラミングを学ぶときは、上から順番に実行するというC言語の基本がなくなるわけではありません。ユーザーの操作によって、どの処理を開始するかが決まる仕組みが加わると考えると理解しやすくなります。

コンソールアプリとGUIアプリの共通点

画面や操作方法は異なりますが、コンソールアプリとGUIアプリはまったく別のものではありません。

どちらもC言語で作成する場合は、次のような知識を利用します。

  • 変数
  • データ型
  • 演算子
  • 条件分岐
  • 繰り返し
  • 配列
  • 文字列
  • 関数
  • 構造体
  • ポインタ

たとえば、2つの数値を足し算する処理そのものは、コンソールアプリでもGUIアプリでも大きく変わりません。

主に変わるのは、数値をどこから受け取るのか、計算をいつ始めるのか、結果をどこへ表示するのかという部分です。

処理コンソールアプリGUIアプリ
数値を受け取る場所コンソールから入力する入力欄から取得する
計算を始めるタイミング必要な入力が終わった後計算ボタンがクリックされたとき
計算処理C言語で足し算するC言語で足し算する
結果を表示する場所コンソール画面ウィンドウ内のラベルなど
処理後の動作終了することが多い次の操作を待つことが多い

GUIアプリを作るときも、これまでに学習したC言語の知識はそのまま役立ちます。そこへウィンドウ、画面部品、イベントなどのGUI特有の知識を追加していきます。

コンソールアプリとGUIアプリの使い分け

コンソールアプリとGUIアプリには、それぞれ得意な用途があります。

コンソールアプリが向いているもの

次のような場合は、コンソールアプリが適しています。

  • C言語の基本を学習する
  • 計算結果だけを確認する
  • 大量のファイルをまとめて処理する
  • 定期的に自動実行する
  • サーバー上で動作させる
  • 開発者向けのツールを作る
  • 処理内容を文字で確認する

画面の見た目よりも、処理の速さや自動化を重視する場合に向いています。

GUIアプリが向いているもの

次のような場合は、GUIアプリが適しています。

  • 一般のユーザーが操作する
  • 複数の入力項目を画面に並べる
  • ボタンから機能を選択する
  • 画像や色を使って情報を表示する
  • 操作結果を画面に残しておく
  • マウスで直感的に操作する
  • ゲーム盤などの視覚的な画面を作る

本コンテンツで作成するGUI電卓や○×ゲームでは、画面上の部品を見ながら操作できるGUIの特徴を活用します。

GUIプログラミングで新しく学ぶこと

コンソールプログラムを作成した経験があれば、GUIプログラミングでも変数、条件分岐、関数などの知識を利用できます。

そのうえで、GUIアプリを作成するために次の内容を新しく学びます。

  • GUIライブラリの利用方法
  • ウィンドウの作成方法
  • ボタンや入力欄の作成方法
  • 部品を画面に配置する方法
  • ユーザーの操作を受け取る方法
  • イベントに対応する処理
  • コールバック関数
  • 画面表示の更新方法
  • アプリケーションを終了する方法

最初はコンソールアプリより複雑に見えるかもしれません。しかし、画面を作る処理、操作を受け取る処理、計算などの本来の処理に分けて考えると、少しずつ理解できるようになります。

図4:処理の開始から終了までの違い

この図から分かること

コンソールアプリは、開始から終了までの処理が一直線に進む構成になりやすいアプリケーションです。入力、計算、結果の表示が終わると、そのまま終了することが多くあります。

GUIアプリは、ウィンドウを表示した後にユーザーの操作を待ちます。操作が行われると対応する処理を実行し、画面を更新して再び操作を待ちます。

ただし、どちらのアプリでも、実際の計算や文字列処理などは基本的に上から順番に実行されます。GUIアプリでは、ユーザーの操作が処理を始めるきっかけになるという点が大きな違いです。