#pragma once:
這是一個比較常用的指令,只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,避免文件被重復包含。
*********************************** 例如 *****************************************
頭文件中的
#if _MSC_VER > 1000 //MFC版本
#pragma once //編譯一次
#endif // _MSC_VER > 1000
是什么意思?
以上意思就是:如果MFC的版本大于4。2的話,本文件就只編譯一次。
************************************************************************************
#pragma comment:
該指令將一個注釋記錄放入一個對象文件或可執行文件中。
該指令的格式為:
??????? #pragma comment( "comment-type" [, commentstring] )
comment-type(注釋類型):可以指定為以下五種預定義的標識符的其中一種。
1、compiler
??? 將編譯器的版本號和名稱放入目標文件中,本條注釋記錄將被編譯器忽略。
??? 如果你為該記錄類型提供了commentstring參數,編譯器將會產生一個警告。
??? 例如:#pragma comment( compiler )
2、exestr
?? 將commentstring參數放入目標文件中,在鏈接的時候這個字符串將被放入到可執行文件中。
?? 當操作系統加載可執行文件的時候,該參數字符串不會被加載到內存中.但是,該字符串可以被dumpbin之類的程序查找出并打印出來,你可以用這個標識符將版本號碼之類的信息嵌入到可執行文件中!
3、lib
?? 這是一個非常常用的關鍵字,用來將一個庫文件鏈接到目標文件中。
?? 例如: #pragma comment(lib, "user32.lib")
??????????? 該指令用來將user32.lib庫文件加入到本工程中。
4、linker
?? 將一個鏈接選項放入目標文件中,你可以使用這個指令來代替由命令行傳入的或者在開發環境中設置的鏈接選項。
你可以指定/include選項來強制包含某個對象。
?? #pragma comment(linker,"/include:__mySymbol")
你可以在程序中設置下列連接選項:
/DEFAULTLIB
/EXPORT
/INCLUDE
/MANIFESTDEPENDENCY
/MERGE
/SECTION
/NODEFAULTLIB
??
又如:
#pragma comment(linker,"/nodefaultlib:LIBC.lib")
該與指令是用來忽略特定庫的,解決諸如LINK : fatal error LNK1104: 無法打開文件“LIBC.lib”的編譯錯誤。
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價于:
#pragma warning(disable:4507 34) // 不顯示4507和34號警告信息
#pragma warning(once:4385)??????? // 4385號警告信息僅報告一次
#pragma warning(error:164)????????? // 把164號警告信息作為一個錯誤。