>>187
二カ所以上で同じ事したら二重定義エラー。
static を付ければ最も簡単に回避できるが、
回避法としては微妙。

俺ならこうする。

-- hoge.h (二重インクルードガードは省略)
/* プロトタイプ宣言 */
#define PROTO_HOGE(type, func, id) \
 type func##id(仮引数並び)

/* 実装 */
#define IMPL_HOGE(type, func, id) \
 PROTO_HOGE(type, func, id) \
 { \
  func(); \
 }

-- hoge.c
#include "hoge.h"
IMPL_HOGE(int, hoge, id1) /* int hogeid1 を実装 */

-- 呼び出し側
#include "hoge.h"
PROTO_HOGE(int, hoge, id1); /* int hogeid1 のプロトタイプ宣言 */
int na = hogeid1(hoge);