本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[QC20]assert 関数の障害

文書番号: 403274

最終更新日: 1998/03/23


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP403274

概要

この資料は、assert 関数の障害について説明したものです。

詳細

ANSI 仕様でコンパイルすると、以下のエラーが発生します。
  error C2065: '_asm' : undefined
  error C2143: syntax error : missing ';' before ''
  error C2059: syntax error : 'int constant'
MS 拡張仕様においても、警告レベルを3にすると、以下のワーニングが発生します。
  warning C4074: non standard extension used - 'function given file scope'
MS 拡張仕様でお使いいただく上では、実害につながるワーニングではありませんので、 無視しても問題ありません。

原因

assert.h の定義に誤りがあります。

対処方法

assert.h に以下の修正をすることで、ANSI 仕様でのコンパイルも正しく行えます。 また、MS 拡張仕様でもコンパイル時のワーニングを消すことができます。
assert.h の 45 行目 (void _CDECL _assert...) を 42 行目に移動してください。
29 行 (#ifdef _QC) から 41 行 (#else) までと 50 行 (#endif /* QC */) を
削除してください。変更後の 23 行目以下は、次のようになります。
  #ifdef NDEBUG
  #define assert(exp)
  #else
  void _CDECL _assert(void *, void *, unsigned); \
  #define assert(exp) { \
               if (!(exp)) { \
                               void _CDECL _assert(void *, void *, unsigned); \
                               _assert(#exp, __FILE__, __LINE__); \
                               } \
      }
  #endif /* NDEBUG */

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBBUG KB403274
Technology: kbAudDeveloper kbCCompSearch kbQC200 kbZNotKeyword3

inserted by FC2 system