関数 A() 関数 B() があり、内容はほとんど同じです。
なので、#ifdef等でコンパイル時に切り分けをして、ソースを共通にできればよいなと考えたのですが
どうにもうまいやり方がわかりません。
ソースを別ファイルにして、#include すればできそうですが、それだと可視性がわるくなるので気が進みません。
以下のような感じで、記述する方法はあるでしょうか。

void A(){
?
}
void B(){
 ?
}

共通のソース
{
#ifdef AAA
・・・
#endif

#ifdef BBB
・・・
#endif
}