
116
7
章 関数
関数には、次の例の
mkNode()
関数のようにポインタ型を返す必要があることも多い。こ
れは、動的に新たな
Node
オブジェクトを作っては、呼び出し側にそのアドレスを返す。
#include <stdlib.h>
struct Node* mkNode()
{
struct Node* pNode = malloc(sizeof(struct Node));
if (pNode != NULL)
{
initNode(pNode);
}
return pNode;
}
mkNode()
関数は新たな
Node
オブジェクトの記憶割り当てに失敗するとナルポインタを返
す。ポインタを返す関数は、通常ナルポインタを失敗条件の意味で使う。例えば、探索関
数は、見つかったオブジェクトのアドレスか、見つからなかったらナルポインタを返す。
7.5
インライン関数
通常、コンピュータは、関数呼び出しで現在の命令アドレスを保存し、呼び出された関
数にジャンプして実行し、戻りのジャンプで保存したアドレスに帰る。度々呼び出す必要
のある小さな関数では、この呼び出し復帰が実行時性能を大幅に低下させる。その結果、
C99はインライン関数定義をオプションに含めた。キーワード
inline
は、コンパイラに対
して、プログラム中で関数呼び出しの箇所に関数の機械語を挿入するよう要請する。結果
として、ソースコードで関数が呼び出された場所に、関数本体の文を挿入したかのように
効率的な実行ができる。
インライン 関数として定 義するには