簡體   English   中英

winapi-使用宏在MessageBox中顯示int變量值

[英]winapi - display int variable value in MessageBox using macros

出於調試目的,我試圖制作一個簡短的宏以顯示各種類型,而不是常量復制所有MessageBox函數的參數。

對於字符串,我具有以下宏:

#define DEBUG(x) MessageBox(NULL, x,"DEBUG",MB_ICONINFORMATION|MB_OK);

不管我傳遞變量( char數組)還是直接字符串,都稱其效果很好。

現在,我嘗試為int做同樣的事情。 定義了這樣的宏:

#define STRIGIFY(x) #x
#define TOSTRING(x) STRIGIFY(x)
#define DEBUGINT(x) DEBUG(TOSTRING(x))

它僅在我傳遞直接整數值的情況下有效:

DEBUGINT(742);

但是,如果我傳遞int變量, MessageBox顯示變量名稱而不是其值:

int count = 3;
DEBUGINT(count);

我覺得很有趣的是,我可以在DEBUGINT宏中傳遞任何內容,並且仍然可以使用:

DEBUGINT(some unescaped string)

如何定義將使用變量值而不是其名稱的宏?

這並不能回答所提出的問題,但是我會冒着名譽的風險,並建議其他解決方案。

請幫個忙,不要使用MessageBox()或其他模式UI來顯示調試信息。 如果確實要中斷程序執行,請使用斷點; 它還允許您附加條件,因此您無需手動檢查該值。

如果不想中斷,只需使用::OutputDebugString()將值打印到調試輸出窗口即可。 如果已連接調試器或通過DebugView工具,可以看到該信息。

另一個小建議(對於Visual Studio用戶):如果在輸出之前添加了源文件名和代碼行號,則在輸出窗口中雙擊該行將直接進入該行。 只需在格式化的字符串中使用__FILE____LINE__

你不能 預處理器對變量或其值一無所知,因為它僅在編譯時不執行任何操作。

您需要使用sprintf (或VS 2015中的snprintf )將變量“打印”到緩沖區( char數組),並將結果輸出作為要顯示的字符串傳遞給MessageBox

您可以使用變量參數列表

#include <stdio.h>
void message(const char* format, ...)
{
    int len;
    char *buf;
    va_list args;
    va_start(args, format);

    len = _vscprintf(format, args) + 1;  //add room for terminating '\0'
    buf = (char*)malloc(len * sizeof(char));
    vsprintf_s(buf, len, format, args);

    MessageBoxA(0,buf,"debug",0);
    //OutputDebugStringA(buf);
    free(buf);
}

message("test %s %d %d %d", "str", 1, 2, 3);

您可能還想更改為unicode版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM