首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

編譯期輸出 TODO/FIXME 列表宏:MSVC 編譯器診斷輸出技巧

     編輯:C++ 入門

效果演示

編譯時在輸出窗口直接顯示:

====================================
File: test.cpp
Line: 42
TODO : not implements now !
====================================
====================================
File: test.cpp
Line: 43
HACK : function implemented by a hack way!
====================================
====================================
File: test.cpp
Line: 44
FIXME : buggy ! !
====================================

宏實現原理

利用 MSVC 編譯器的 #pragma message 或 __pragma(message(...)) 在編譯期輸出自定義信息。關鍵技巧:

  • __FILE__, __LINE__ 獲取位置。
  • 字符串化操作符 # 將行號轉為字符串。
  • 多行拼接用 \n 換行。

完整宏定義

#define TOOLS_STRINGIZE(L) #L
#define TOOLS_MAKESTRING_IMPL(M, L) M(L)
#define TOOLS_MAKESTRING(x) TOOLS_MAKESTRING_IMPL(TOOLS_STRINGIZE, x)

#define TOOLS_MESSAGE_LINE "\n====================================\n"
#define TOOLS_MESSAGE_POSITION __FILE__ "\nLine:" TOOLS_MAKESTRING(__LINE__) "\n"

#define TODO(x) __pragma(message(TOOLS_MESSAGE_LINE TOOLS_MESSAGE_POSITION "TODO : " x TOOLS_MESSAGE_LINE))
#define HACK(x) __pragma(message(TOOLS_MESSAGE_LINE TOOLS_MESSAGE_POSITION "HACK : " x TOOLS_MESSAGE_LINE))
#define FIXME(x) __pragma(message(TOOLS_MESSAGE_LINE TOOLS_MESSAGE_POSITION "FIXME : " x TOOLS_MESSAGE_LINE))

使用示例

TODO("not implements now !")
HACK("this function is implemented by a hack way!")
FIXME("buggy ! !")

int main(int argc, char* argv[]) { return 0; }

適用場景與注意

  • 僅限 MSVC(Visual Studio),GCC/Clang 需用 #warning 或 _Pragma("GCC warning ...")。
  • 編譯期輸出,不影響運行性能,無需運行程序即可看到待辦列表。
  • 可集成到 CI 流程,統計代碼庫 TODO/FIXME 數量。
  • 避免在頭文件中大量使用,以免編譯輸出過多干擾。

跨平台擴展思路

#ifdef _MSC_VER
#define COMPILE_MSG(msg) __pragma(message(msg))
#elif defined(__GNUC__)
#define COMPILE_MSG(msg) _Pragma(#msg)
#else
#define COMPILE_MSG(msg)
#endif
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved