
7.2
関数宣言
113
7.2
関数宣言
使う前に関数を宣言することで、コンパイラに型を知らせる。言い換えると、宣言は関
数のインタフェースを記述する。宣言は最低限、関数の戻り値の型を次のように示さねば
ならない。
int rename();
これは、
int
型の値を返す関数
rename()
を定義する。関数名がデフォルトで外部識別子
なので、これは次と等価である。
extern int rename();
この宣言は、関数引数の個数や型の情報を含まない。結果として、コンパイラは、この
関数への呼び出しが正しいかどうかをテストできない。関数を定義と異なる個数や型の引
数で呼び出すと、結果は致命的な実行時エラーとなる。このようなエラーを防ぐには、関
数引数を常に宣言しておく。言い換えると、関数宣言は関数プロトタイプであるべきだ。
例えば、ファイル名を変更する標準ライブラリ関数
rename()
のプロトタイプは次の通り。
int rename(const char* oldname, const char* newname);
この関数は、
const char
へのポインタ型の2引数をとる。言い換えると、関数は
char
オ
ブジェクトを読むためだけにポインタを使う。引数は文字列リテラルでもよい。
プロトタイプ宣言では引数の識別子は省略できる。名前を含めたとき、そのスコープは
プロトタイプそのもののスコープとなる。コンパイラには意味がないので、実用上は、プロ
グラマに引数の目的は何であるかを伝えるコメントでしかない。
rename() ...