[英]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.