C言語とは
C言語は1972年に誕生し現在も使われているプログラミング言語です。
多様なOSで動作するため汎用性に優れ、高速な処理能力を持ち、ハードウェア層の制御が可能です。これらの特性から、テレビ、炊飯器、電子レンジなどの家電製品の組み込みシステム開発に始まり、多岐にわたる分野で利用されています。
また、C++やJavaなどC言語の後に開発された言語に大きな影響を与えているため、C言語を学ぶことで、プログラミングの基本概念を学ぶことができるというメリットがあります。
Cプログラムの作成から実行まで
C言語のプログラムを作成し実行するまでの手順は以下のようになります。
- (1)ソースプログラムの作成
-
メモ帳などのテキストエディタを使用し、C言語の命令文を記述します。
次にエディタで作成したファイルを拡張子「.c」として保存します。
※このファイルを「ソースファイル」と呼びます。
- (2)コンパイル
-
コンパイルとは、ソースプログラムを機械語に翻訳しオブジェクトモジュールを生成する作業のことです。
ソースプログラムは、自分たち人間にわかるようにプログラミング言語を利用して記述したものであるため、コンピュータは理解することができません。
そこで、コンピュータが理解できる0と1だけを使ったバイトコードに変換する「コンパイル」という機械語への変換作業が必要になってきます。
翻訳されたファイルはオブジェクトモジュールとよばれ、拡張子は「.obj」として生成されます。 - (3)リンク
-
リンクとは、複数のオブジェクトモジュールとCコンパイラに搭載されている標準ライブラリや開発者が独自で作成したオブジェクトモジュールなどを組み合わせて、コンピュータ上で実行可能なプログラムを作成することです。
リンクを実行することで実行モジュールが作成されます。
実行モジュールの、拡張子は「.exe」です。
C言語のコンパイル・リンクはCコンパイラで実行できます
Windows上では次のコンパイラが使用できます。どちらも無料で使用可能です。
1.GCC
オープンソースで広く使用されているコンパイラです。
MinGW-w64をインストールすることで使用できます。
2.Microsoft Visual C++
Windows向けのコンパイラで統合開発環境のVisual Studioに含まれています。
Visual Studio Community 2022をインストールすることで使用できます。
基本的なプログラムについて
コンソール画面に「Hello World」と表示するC言語のプログラムから、C言語の基本的な書き方をみていきましょう。
基本的に、半角文字を用いて記述します。
また、英字の大文字、小文字は区別しますので、注意して記述しましょう。
以下がそのソースです。
#include <stdio.h>
void main(void){
/* 画面出力 */
printf("Hello World\n");
}
実行結果
Hello World
では、ソースの各行を見ていきましょう。
- ①#include
-
#includeはヘッダファイルと呼ばれる拡張子「.h」のファイルを読むこむときに使用します。
この行では、「stdio.h」 というファイルを読み込むという記述です。
「stdio.h」には、標準C言語ライブラリで用意されている関数の定義が記載されています。
そのため、この記述により、標準C言語ライブラリ関数を使用することができるようになります。
このサンプルプログラムでは、以下に続くprintf()関数を使用するために記述しています。
まずは、プログラムの先頭に「おまじない」としてこの行を記述すると覚えておきましょう。
- ②void main(void)
-
main()というメイン関数の実体を宣言しています。
C言語の実行モジュールを実行した際、main()関数内の処理がまず呼び出されるので、必ず定義する必要があります。
“{“および”}”で囲まれた範囲が一つのブロックを表しています。
“{“および”}”の間に、命令文を記述します。
一つのブロック間では、インデント(字下げ)をすることにより、プログラムを見やすくします。
voidは、戻り値や引数が不要な場合に使用されます。詳細は後の関数に関する章で説明します。。
- ③/* 画面出力 */
-
コメントを記述する際に使用します。
コメントは実行時に影響を与えません。ソースファイルの可読性をよくするために使用します。
//画面出力
または
/* 画面出力 */というように//や/* */を使用します。
- ④printf(“Hello World\n”);
-
printf()は標準出力する際に使用する標準C言語ライブラリ関数の一つです。
“”(ダブルクォーテーション)で囲まれた文字列をコンソール画面に出力します。
「¥n」は改行を表す特殊な文字で、「エスケープシーケンス」と言い、この文字があると改行され、この文字に続く文字列は次の行から表示されます。
文の終わりには必ず、”;”(セミコロン)を記述します。
C言語プログラムのソースコードのスタイルをまとめます。
- 基本的に半角文字を用いて記述する
- 英字の大文字と小文字を区別することに注意
- プログラムはmain()関数で始める
- 文の終わりには;(セミコロン)をつける
- {、}は対になっており、{、}で囲まれたブロックで構成される
- コメント(注釈)は/* */で囲む。コメントを記載することで可読性があがる
- インデント(字下げ)をして読みやすくする
printf()関数について
今後、課題を実施していく際、printf関数が必要になってくるため、printf()関数についてふれておきます。
printf()は、画面に書式付で出力する関数です。
書き方
printf(書式指定文字列,省略可能な引数1,省略可能な引数2,…);
- ①書式指定文字列
-
””(ダブルクォーテーション)で囲まれた文字列を記述します。
書式指定文字列で指示した通りに標準出力されます。
また、書式指定文字列には、表示の見栄えをよくするために、また、変数の値を表示するため、%と変換指定子を記述することができます。
主な変換指定子の一覧
書式 | 意味 |
---|---|
%d | 整数値を10進数で表示 |
%f | 実数値を [- ]dddd. dを持つ符号付き値で表示。※ dddd は 1 桁以上の 10 進数 |
%c | 1文字として表示 |
%s | 文字列。文字列をそのまま表示 |
%o | 8進数で表示 |
%x | 16進数で表示 |
書式指定文字列にはエスケープシーケンスも含めることができます。
主なエスケープシーケンスの一覧
記号 | 意味 |
---|---|
\a | 警告音 |
\b | バックスペース |
\n | 改行 |
\t | タブ |
\\ | 文字としての¥ |
\? | 文字としての? |
\” | 文字としての”(ダブルクォーテーション) |
\’ | 文字としての’(シングルコーテーション) |
\0 | NULL文字 |
- ②省略可能な引数
-
引数とは、関数に渡される値のことです。
printf()の場合、省略することもできますし、個数が可変になるという特殊な性質があります。
・引数がない場合
printf("Hello World\n");
・1個以上の引数がある場合
printf("%d + %d = %d¥n", 2,3,2+3);
出力形式を変換指定子で指定します。変換指定子の数だけ、引数が必要になります。
変換指定子と引数は左側から順に対応し、以下のような実行結果になります。
【実行結果】
2 + 3 = 5
printf()関数は標準出力に用いられますが、セキュリティの問題等で実際の開発では使用を避けることが一般的です。
コメント