- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Linux(g++)とAIX(XL C++)の挙動の違いについて)
Linux(g++)とAIX(XL C++)の挙動の違いについて
このQ&Aのポイント
- Linux(g++)とAIX(XL C++)で同じプログラムをコンパイルした場合、コンストラクタの呼び出しタイミングに差異がある。
- g++ではメソッドの呼び出し前にコンストラクタも呼び出されるが、XL C++ではメソッドの呼び出しのみが行われる。
- XL C++の挙動をg++と合わせるためには、コンパイル時のパラメータ設定が必要となる可能性がある。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
使ったことにないコンパイラなので言語仕様からの推測ですが、 もしかして確認手段の問題ではありませんか。 グローバル変数の初期化順という典型的な不定に起因していて、 「実際には両方ともコンストラクタが呼ばれている」が、 XL C++では、「コンストラクタが呼ばれた時点でまだ標準出力が準備できてない」ので、文字が表示されないだけなのではないでしょうか。 # まずprintfの戻り値を確認してみるとか、 # またはフラグなど別の手段で確認してみてください。 もしそうであれば、 ・printfが単なる確認用で初期化は順不同でよいなら今のまま。 ・順序に意味があるなら、グローバル変数のコンストラクタに順番を期待するのは間違いなので、グローバル変数を変える/コンストラクタを変える。 などで対応してください。
お礼
御返答ありがとうございます。 結論から言いますと、原因が分かりました。 コンパイラですが、xlcを使っていたのですがxlCを使う事で想定していた通りの結果が得られました。 お騒がせしました。 >「実際には両方ともコンストラクタが呼ばれている」が、 >XL C++では、「コンストラクタが呼ばれた時点でまだ標準出力が準備できてない」ので、文字が表示されないだけなのではないでしょうか。 こちらについては例ではprintfだけですが、実際は変数初期化等を行っていました。 しかし、xlcの場合は初期化されなかった為にその変数を使用したメソッドがバッファーオーバーフローを起こしてSegmentation Faultが発生した為、調べた所コンストラクタが呼ばれていない事に気づいた次第です。 ありがとうございました。