HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1124
ひらまる_debugをつかったデバッグについて5解決


ひらまる

リンク

2010/11/24(Wed) 19:53:51|NO.36020

こんにちは。
HSPには、デバッグモードで実行したとき、「_debug」というマクロが定義されます。
これを利用して、

;通常 #ifdef _debug mes "デバッグ" #else mes "ノーデバッグ" #endif
とするのは一般的ですが、たとえばデバッグログを送りたい場合、

;処理 デバッグログ表示命令 "デバッグログ" stop ;命令 #deffunc デバッグログ表示命令 str _ログ #ifdef _debug mes "デバッグ : " + _ログ #endif return
という命令を作ることも考えられます。
しかし、この場合、実行ファイルにした後、デバッグモードではなくても
「デバッグ判定命令 "デバッグログ"」は実行され、何もされずに返ってきます。
この処理は、引数として文字列を渡すので、わずかながら実行速度に影響すると考え、

;マクロ #define デバッグ判定マクロ(%1) #ifdef _debug %c デバッグログ表示命令 %1 %c #else %c mes "ノーデバッグ" %c #endif ;処理 デバッグ判定マクロ "デバッグログ" stop ;命令 #deffunc デバッグログ表示命令 str _ログ mes "デバッグ : " + _ログ return
としようとしました。
しかし、実行するとわかると思いますが、
デバッグモードの場合と、デバッグモードでない場合、両方が実行されてしまいます。
おそらく原因は、マクロで定義した「#ifdef _debug」が、
「_debug」を展開して「#ifdef 」←空白 となっていることだと思われます。

質問としましては、
デバッグモード時のみ実行される命令を、
ノーデバッグ時に負担をかけずに、
簡潔に書くにはどうしたら良いか。
です。

1番目の方法でも、いまどきのPCなら、負荷などミジンコ程度だとは思うので、
もし、毎回「#ifdef _debug」と「#endif」を書かなければならないようならば、
命令の最初と最後に記述する方法を取りたいと思います。
よろしくお願いします。



この記事に返信する


Ve

リンク

2010/11/24(Wed) 20:48:02|NO.36021

logmesは使わずにmes?



レノス

リンク

2010/11/24(Wed) 22:25:06|NO.36022

スマートではないですが、こんな方法があります:

#ifdef _debug #define デバッグ判定マクロ(%1) デバッグログ表示命令 %1 #else #define デバッグ判定マクロ(%1) mes "ノーデバッグ" #endif

// マクロ展開後に生成される #if って処理されるのかなぁ……?



ひらまる

リンク

2010/11/25(Thu) 00:08:58|NO.36025

>Veさん
いや命令は何でも良いんでテストで書きました;
>レノスさん
その発想はやばいです。頭良すぎです。
デバッグじゃないとき「なにもしない」場合はどうしたら良いか考えましたが、

#ifdef _debug #define デバッグ判定マクロ(%1) mes %1 #else #define デバッグ判定マクロ(%1) #undef _debug #endif デバッグ判定マクロ "デバッグメッセージ"
というように、無意味なプリプロセッサにすれば、
実行時に処理されないという方法を思いつきました。
感謝感謝です。
ありがとうございました!



通りすがり

リンク

2010/11/25(Thu) 02:12:45|NO.36026

私が確認した限りでは、
マクロ内で使用できるプリプロセッサディレクティブは
#deffunc と #defcfunc だけしか使用できませんでした。
それもある特定の条件の中でのみ使用可能のようす。
マクロ中のプリプロセッサが使用出来たら
面白い事が出来そうなのですけどね。

> 無意味なプリプロセッサにすれば、
> 実行時に処理されないという方法を思いつきました。

何か文字を書いておけば良い見たいなので
コメントを使った方が説明も兼ねれて良いかと。

#ifdef _debug #define デバッグ判定マクロ(%1) mes %1 #else #define デバッグ判定マクロ(%1) // コメント #endif



ひらまる

リンク

2010/11/25(Thu) 19:10:52|NO.36029

>通りすがりさん
#define マクロ
これはOK
#define マクロ(%1)
これはNG
#define マクロ(%1) //
これはOK

なんですね…。
非常にスマートで、処理に一切負担をかけない方法を教えてくださり、ありがとうございます!



ONION software Copyright 1997-2023(c) All rights reserved.