“#pragma”指示符設定連接器參數來導出函數,其實“#pragma”的功能遠遠不止於此:
1.指示文件只包含一次
在頭文件中,一般在整個工程中我們只要包含一次就夠了,但是如果我在多個 .c/.cpp 文件中都要包含着個頭文件,比如 Windows.h,那很多聲明等等豈不是有兩次了?解決這個問題的傳統的方法是在頭文件開始出用 #define 定義一個宏,比如 Windows.h 中:
#ifndef _WINDOWS_
#define _WINDOWS_
然後在文件結爲加上 #endif,這樣就可以避免被包含多次。但是這樣的後果是代碼的可讀性較差 (個人觀點),VC 給我們提供了另外一個途徑,那就是在文件的前面加上:
#pragma once”
是不是很方便?
2.使警告無效
有時候我們不得不對變量進行強制轉換,由此引來編譯器的一番警告,特別是 C++ 中,類型檢查相對於 C 更爲嚴格。這雖然不影響什麼,但是看起來多不爽——我是故意要這樣的,你警告什麼!:)這時候你看到警告類型,比如“warning C4311: “類型轉換” : 從“HHOOK”到“BOOL”的指針截斷”,在前面加上:
#pragma warning(disable: 4311)
編譯器就沒話說了:)。
3.指定連接要使用的庫
比如我們連接的時候用到了 WSock32.lib,你當然可以不辭辛苦地把它加入到你的工程中。但是我覺得更方便的方法是使用 #pragma 指示符,指定要連接的庫:
#pragma comment(lib, "WSock32.lib")
4.顯示編譯消息
沒多少用處,舉個例子吧:
#ifdef _DEBUG
#pragma message("編譯連接爲調試模式...")
#endif // _DEBUG
1.指示文件只包含一次
在頭文件中,一般在整個工程中我們只要包含一次就夠了,但是如果我在多個 .c/.cpp 文件中都要包含着個頭文件,比如 Windows.h,那很多聲明等等豈不是有兩次了?解決這個問題的傳統的方法是在頭文件開始出用 #define 定義一個宏,比如 Windows.h 中:
#ifndef _WINDOWS_
#define _WINDOWS_
然後在文件結爲加上 #endif,這樣就可以避免被包含多次。但是這樣的後果是代碼的可讀性較差 (個人觀點),VC 給我們提供了另外一個途徑,那就是在文件的前面加上:
#pragma once”
是不是很方便?
2.使警告無效
有時候我們不得不對變量進行強制轉換,由此引來編譯器的一番警告,特別是 C++ 中,類型檢查相對於 C 更爲嚴格。這雖然不影響什麼,但是看起來多不爽——我是故意要這樣的,你警告什麼!:)這時候你看到警告類型,比如“warning C4311: “類型轉換” : 從“HHOOK”到“BOOL”的指針截斷”,在前面加上:
#pragma warning(disable: 4311)
編譯器就沒話說了:)。
3.指定連接要使用的庫
比如我們連接的時候用到了 WSock32.lib,你當然可以不辭辛苦地把它加入到你的工程中。但是我覺得更方便的方法是使用 #pragma 指示符,指定要連接的庫:
#pragma comment(lib, "WSock32.lib")
4.顯示編譯消息
沒多少用處,舉個例子吧:
#ifdef _DEBUG
#pragma message("編譯連接爲調試模式...")
#endif // _DEBUG