今日の雑記

生きることでいっぱいいっぱい

関数をどういう順番で定義するか

という話。から、書いていくうちに別の話になった<なんだそれ
ボクの場合は、まあ大体「重要そうな順番」というか「呼ばれる(頻度も含めて)順番」で定義することが多い、ような、気が、する。
簡単な例を示すと、

int HogeInit(void)
{
    hoge = 0;

    return 0;
}

int HogeExit(void)
{
    hoge = -1;

    return 0;
}

int HogeProc(void)
{
    hoge++;

    return 0;
}

void HogeSet(int val)
{
   hoge = val;
}

int HogeGet(void)
{
    return hoge;
}

のような感じ。って伝わるかな?
そして、ソース内ローカルスコープな関数はほぼ間違いなくソースの下の方で定義される。そして、大体こんな感なソースになる。

static void HogeInc(void);

(略)
int HogeProc(void)
{
    HogeInc();

    return 0;
}
(略)

void HogeInc()
{
    hoge++;
}

何でこうしてるのかは、単に「ボクにとってその方が見やすいから」という以外に理由はない。
さて、さらにボクの場合、上のソースは以下のような感じになる。

int HogeInit(void);
int HogeExit(void);
int HogeProc(void);
void HogeSet(int val);
int HogeGet(void);

static void HogeInc(void);

int HogeInit(void)
{
    hoge = 0;

    return 0;
}

int HogeExit(void)
{
    hoge = -1;

    return 0;
}

int HogeProc(void)
{
    HogeInc();

    return 0;
}

void HogeSet(int val)
{
   hoge = val;
}

int HogeGet(void)
{
    return hoge;
}

void HogeInc()
{
    hoge++;
}

ボクのゲームとかで C で組まれたやつのソースコードを見た人は「あー」と思われるかもしれません。
まあ確かに無駄な記述だと思う(extern なプロトタイプ宣言はヘッダに書けば良いじゃない)のだけど。
特に深い意味とか理由はないんだけど、主に「ヘッダファイルよりソース見る事が多い」のが理由かな?ソースが公開されてるライブラリとかだったら、ヘッダファイル調べるよりソースコードをまず見るし。あとはまあ、せいぜい、ボクが書いたヘッダファイルはソースコードからコピペして編集したものなので、「ヘッダ見るよりはソース見た方が早い」というのもあるかも。
でも、この辺は言語文化の違いもあるかも。よくわかってないで書くけど、C++ とかだったら「まずヘッダファイル(の中のクラス定義)ありき」という感じかもしれないし。
実はそんなことより、ボク自身は「ヘッダファイル(というかプリプロセッサ)はちょっとねー」という論調の人間だったりするのです。それが一番でかい理由かも。