一般情況下,#pragma message( messagestring )是在編譯期間,將一個文字串(messagestring)發送到標准輸出窗口。典型的使用方法是在編譯時報告和顯示信息。下面的代碼段是編譯期間在標准輸出窗口顯示一條消息:
#if _M_IX86 == 500
#pragma message( "Pentium processor build" )
#endif
messagestring 參數可以將文字串常量擴展成一個宏,從而可以顯示任何形式的字符串。例如,下面的語句顯示被編譯文件的名字以及文件被最后一次修改的日期和時間:
#pragma message( "Compiling " __FILE__ )
#pragma message( "Last modified on " __TIMESTAMP__ )
#pragma message("Remember to write some actual code in this sample app!!"))
下面我們就利用這個特性,進一步擴展#pragma message的使用。先在一個頭文件(假設為lfpragma.h)中定義下面的宏:
#define PTODO_LINENUMBER_TO_STRING(x) #x
#define PTODO_LINENUMBER(x) PTODO_LINENUMBER_TO_STRING(x)
#define INCLUDE_FILE_AND_LINE(string) __FILE__"(" PTODO_LINENUMBER(__LINE__) "): "string
然后在任何cpp文件中包含lfpragma.h文件,那么我們就可以象下面這樣引用前面定義的宏。如:
#pragma message( INCLUDE_FILE_AND_LINE("Compiling ") __FILE__ )
#pragma message( INCLUDE_FILE_AND_LINE("Last modified on ") __TIMESTAMP__ )
#pragma message(INCLUDE_FILE_AND_LINE("Remember to write some actual code in this sample app!!"))
這樣使用#pragma message與通常使用的方法有什么不同呢?平常我們使用#pragma message時,在標准輸出窗口中可以看見#pragma message的輸出信息,但是鼠標點右鍵彈出的上下文菜單中“Go to Error/Tag”菜單項是置灰的,不可用。但是如果使用上面定義的宏,我們就可以激活上下文菜單中“Go to Error/Tag”,從而定位到相應的代碼行
pragma message是用來告訴程序員,程序在編譯時期的信息。而outputdebugstr則是告訴程序員,程序在運行時期的信息。
下面就以一個例子來講解pragma message。
配合#if/#ifdef/#ifndef設置編譯時的提示信息,例如:
//test.cpp
#define UNICODE
#ifdef UNICODE
#pragma message("使用UNICODE字符集")
#else
#pragma message("使用ANSI字符集")
#endif
int main()
{
return 0;
}