ページ 11

#ifdef DEBUG のつづき

Posted: 2005年11月18日(金) 22:56
by Ko
プログラミング掲示板に書いた #ifdef DEBUG の件ですが、
マティさんと山本さんの返信と自分の投稿を読返してみて、もしかすると、伝わっていないのかもしれないと思い、
こちらに再投稿します。
リリースコンパイルでも無視されていない
のは、#define DEBUG ではなくて、 debug.sbp です。つまり、
_DebugSys_GetThread() や _DebugSys_EndProc() もリリース版でコンパイル
されてしまっている。ということなのです。

書込みの途中で、debug.sbp がリリースコンパイルで正常に無視されれば、その中の #define DEBUGも無視されて、
#ifdef DEBUG が実現されると思ったもので、わかりにくい投稿になっていしまいました。

山本さん、お忙しいと思いますが修正よろしくお願いします。

Posted: 2005年11月18日(金) 23:27
by 山本
リリースコンパイルでもdebug.sbpがインクルードされている、ということですが、その通りです。ただし、debug.sbp内で定義されているデバッグ用の関数郡はリリースコンパイルでは呼ばれないため、_DebugSys_GetThread() や _DebugSys_EndProc() などの関数がリリースコンパイル後の実行ファイルから呼ばれることはありません。

ちなみに、ABは一度も呼ばれない関数はコンパイルの対象にならないというちょっとした特徴を持ち合わせています(エラーチェックが行われなくなるなどの弊害があるため、将来的に修正を行う予定ですが…)。

よって、リリースコンパイルを行った場合、実行ファイルの内部に_DebugSys_GetThread() や _DebugSys_EndProc() の内容が書き込まれることはありませんし、呼び出されることもありません。

それと#ifdef _DEBUGについてですが、実はこちら、Ver4.11.02で対応しています。次回のバージョンアップで、ヘルプリファレンスの書き換え、ライブラリの改正などを行う予定です。

識別名は "DEBUG" ではなく、"_DEBUG" です。システム上の識別名ということで、アンダーバーを付けておきましたので、ご注意ください。

Posted: 2005年11月26日(土) 14:49
by Ko
山本さん、対応ありがとうございました。知識不足でバグ報告へ投稿し失礼致しました。

_DEBUG は、早速使わせて頂いてます。快調です。
また、一度も呼ばれない関数はコンパイルされないという仕様は、できれば残しておいて
ほしいと思います。今まで汎用関数をプログラムに応じて編集して #include していましたが、
これなら1ファイルにまとめておくだけで使えそうなので便利だと思います。

ver5 の開発、がんばって下さい。