「このようなものはプログラムの開始時に初期化する必要があります」コードのチャンクをそれぞれのモジュールに対してローカルに保ちながら実行するための可能な方法をいじって、これを思いついた:
static struct init {
init() {
// do stuff
}
} _;
それをモジュールに入れると、a.cc
うまくいきました。モジュールにも入れてみると、b.cc
Aのバージョンは2回呼び出され、Bのバージョンはまったく呼び出されませんでした。私は大丈夫、コンパイラのバグを考えていました。同じ名前の2つの関数について混乱していますが、さらにテストすると、MicrosoftC++とGCCでまったく同じように動作することに驚きました。両方のコンパイラに同じバグがあるのでしょうか、それとも言語セマンティクスについて私が見逃しているものがありますか?
また、同じ結果を達成するための回避策または他の方法に関する推奨事項はありますか(関連する関数をエクスポートし、それらを明示的に呼び出すことは別として、main
明らかにフォールバックです)?