2010-10-03 65 views

回答

3

此編譯指示允許庫作者根據可在編譯時分析的一系列標準定義庫導入。例如,根據是否要鏈接,可以鏈接到不同的庫:

  • 多線程開啓或關閉;
  • 有問題的庫的共享或靜態版本;
  • 標準運行時庫的共享或靜態版本;
  • 調試或發佈庫;
  • 32位或64位庫。

使用編譯指示形式,所有這些都可以通過#ifdef預處理器測試在一個庫的頭文件中決定。

1

#pragma對分發庫很有用。特別是如果針對不同的構建設置(例如,調試與發佈,多線程C運行時與單線程,DLL與靜態庫等)有不同的編譯.lib。您可以在代碼中使用#ifdef來選擇正確的.lib文件,而不是要求用戶設置其構建環境以選擇正確的.lib文件。

它減少了支持時間,因爲您的用戶不能選擇錯誤的.lib文件。

1

這是一個MSVC-specific pragma這意味着指定的庫將在鏈接時自動包含。關於「只包含庫」的問題的其餘部分表明,您不理解頭文件和庫之間的區別:頭文件(GL/glut.h)描述了編譯器在鏈接時可能期望的功能。該庫(lib/glut32.lib)提供了這些功能的實現。

至於其他的答案已經解釋,它可以方便的,但我個人認爲這是一個可怕的想法利用這一點,因爲它增加了另一個障礙編寫移植代碼(其它平臺和編譯器可能不支持它)。 This question(謝謝,@martin clayton)解釋了爲什麼它不是便攜式代碼的好主意。

+0

是否沒有其他(流行)編譯器的等價物? GCC有類似的東西嗎? – Robinson 2015-06-29 09:12:19

相關問題