1.IFくらい気にしない
2.関数ポインタにしておいて必要に応じて差し替える
3.functorにしておいて(以下略
4.その他

>>18
>Windows上ではコード領域を書き換えようとすると例外が起こる

自前の領域なら大丈夫。

int main()
{
  int   x = 0;
  BYTE  *code = (BYTE *)malloc(64);
  
  code[0] = 0xB8;    // mov eax
  code[1] = 0x64;    // 100
  code[2] = 0x00;
  code[3] = 0x00;

  code[4] = 0x00;
  code[5] = 0xC3;    // ret

  // 関数ポインタにキャストして実行してやると x = 100になる
  x = (*((int (*)(void))&code))();

  printf( "x = %d\n", x );

  free( code );
  return 0;
}