メモメモエ

/ .trash / Comment[0]
Cのプログラムは、関数と呼ばれる小さな部品の集合体として記述される。
関数にはある一塊の処理手順が定義されており、これらを組み合わせることで、1つの大きなプログラムが構成される。
関数はプログラマ自身で定義するが、外部ライブラリが提供する関数を呼び出して使うことも可能。

main.cではmainおよびget_valueの2つの関数が定義されているが、関数mainはほかのすべての関数とは性質が異なる特別な関数である。
Cでは、OSがプログラムを起動する際には必ずmainから処理を開始するように決められている。


/* 1.ヘッダファイルのインクルード */
#include <stdio.h>
#include <stdlib.h>

/* 2.マクロ定義 */
#define NULL_VALUE "NULL"
#define PROGRAM_NAME "sample"

/* 3.関数のプロトタイプ宣言 */
int get_calue();
double calc(int n);

/* 4.大域変数 */
char *env_val;

/* 5.main関数 */
int main()
{
int value;
double result;

/* 環境変数からせいの値を取り出す。結果が0以下ならエラー */
value = get_value();
if (value <=0){
printf("%s: illegal value(%s)\n",PROGRAM_NAME, env_val);
return 1;
}

/* 取り出した値に対して何らかの計算を行う */
result = calc(value);
printf("%s: %f\n", PROGRAM_NAME, result);
return 0;
}

/* get_value関数:環境変数から値を取り出す */
int get_value()
{

/* 環境変数VALUEの値を取り出す。未定義なら0を返す */
env_val = getenv("VALUE");
if (env_val == NULL) {
env_val = NULL_VALUE;
return 0;
}

/* 取り出した値を数値に変換して返す */
return atoi(env_val);
}



ヘッダのインクルード #include


main.cの最初におかれている#include~がインクルード指示(include directive)と呼ばれるもので、このソースファイル(main.c)に他のファイルの内容をすべて取り込むことを指示するもの。

includeによって取り込まれるファイル内容は、Cコンパイラが理解可能な内容であれば何でも構わない。しかし、通常は特定の目的のために用意された内容が記述されている。
関数プロトタイプ宣言、マクロ定義、大域関数の宣言などのみが含まれており、関数の定義は含まれて居ない。
このような内容のみが収められたファイルはヘッダファイルといい、拡張子.hが付与されている。


マクロ #define

インクルード指示の後2.には、各種のマクロ定義が記述されている。
マクロとは、指示した文字列を別の文字列に置き換えるための仕組みで、
「#define マクロ名 マクロ定義」という形で定義する。
上記の例では
NULL_VALUE → NULL
PROGRAM_NAME → sample
という文字列に置き換えられることになる。
マクロを使うと値の定義を一箇所に集約することができる。プログラムを修正するときはマクロを一箇所を変更するだけで
マクロを使っている場所すべてが適応され、メンテナンス性が向上する。

マクロによる文字列の置き換えを「マクロ展開」と呼ぶ
マクロ展開はコンパイル前にプリプロセッサと呼ばれる別のソフトウェアによって行われる。


関数のプロトタイプ宣言

他の関数を利用する場合、Cではその関数の名前、そして関数が受け取る値(引数)および関数が返す値(返却値)の型と組み合わせを前もって宣言しておくように求められている。
これをプロトタイプ宣言という。
main.cでは関数get_valueおよびcalcの2つのプロトタイプ宣言を行っている。
プロトタイプ宣言が必要とされるのは、関数呼び出し時の型の整合性をコンパイラがチェックできるようにするためです。例えば、関数calcは引数としてint型の値を受け取り、double型の値を返すように定義されている。プロトタイプ宣言によって関数の型が事前にわかるため、calcが返す値をdouble以外の型の変数に代入するようなコードが存在した場合、コンパイラはそれをチェックしてエラーとすることが可能となる。
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可