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なるものも試してみたが、なんだか動作が良く分からずに断念。