Eliminate Writeable static data in DLLs (2)

こんな感じにするとコード本体にはほとんど手を付けないでいける。global storageはThread Local Storageに格納してあり、擬似的なグローバル変数として使える。問題はグローバル変数をstruct global_varsに集約しなければならない事とスピードの低下だが、これはまぁ仕方無いかな。

struct global_vars {
  int g_a_value;
};
struct global_vars* global_storage(void);
#define GLOBAL(varname) (global_storage()->g_##varname)
#define a_value (GLOBAL(a_value))

CからC++へとconvertする方法も考えたが、本家とあまりにもコードが違ってしまうのも嫌。C to C++ converterなるものも試してみたが、なんだか動作が良く分からずに断念。