テテのつぶやき 2013年2月 | 2013年3月 | 2013年4月

RSS 1.0

テテの不定期日記です。短めのつぶやきはtwitter (twilog)にて。



無名構造体でバグるVisual C++ 2005

日時: 2013年3月18日 16時27分
カテゴリ: 日記

下記のC++ソースをVisual C++ 2010でビルドして実行すると、カモンべいべーと出力されます。

ところがどっこい、Visual C++ 2005のReleaseでビルドして実行すると (SP1やhotfixを適用済み)、カモンカモンと出力されてしまいます。何だかビートルズの曲みたいです。Visual C++ 2005には、無名構造体の処理にバグがあるようです。

#include <stdio.h>

class Hoge {
public:
  struct {
    void print() { printf("カモン"); }
  } comeon;

  struct {
    void print() { printf("べいべー"); }
  } baby;
};

int main()
{
  Hoge h;

  h.comeon.print();
  h.baby.print();
  printf("\n");

  return 0;
}

ちなみに、上記ソースをVisual C++ 2005のDebugでビルドしようとしても、fatal error LNK1179が発生してビルドできませんでした。

mozillaのソースコードにも、上記のような感じで無名構造体を使っている箇所があります ( gfx/skia/src/gpu/gl/GrGpuGL.h )。デバッグ用のビルドを作っていなかったら、意図しないコードが実行される恐れや、意図したコードが実行されない恐れに気付かなかったかも。今後ともデバッグ用のビルドも作っていこうと、改めて思った次第です。


他の記事

記事検索フォーム

Google

カレンダー

前月へ | 2013年3月 | 次月へ
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

最近のコメント

  1. QUAD-CAPTUREのUSBケーブルの接続先PCを変えて、RMAAを実行してみた
    • テテ [2014-08-23]
    • アイヴァーン [2014-08-23]
    • テテ [2014-08-21]
    • アイヴァーン [2014-08-21]
  2. CalibrizeをWindows 7で使用する方法
    • テテ [2013-12-24]
    • 検索してたどり着きました [2013-12-24]
    • テテ [2013-08-01]
    • 初心者 [2013-08-01]
    • テテ [2012-05-08]
    • 通りすがり [2012-05-08]
  3. Roland QUAD-CAPTURE UA-55がキタ
    • 友友狗部落格 [2012-12-05]
  4. Firefox 16.0.1とEarlybird 16.0.1 私的ビルドをアップ (CanvasのputImageDataを高速化)
    • テテ [2012-11-23]
    • [2012-11-23]
  5. 人体感知センサーを組み立てた
    • ケンタ [2012-10-05]
    • テテ [2012-10-04]
    • ケンタ [2012-10-04]

過去ログ


広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。