2011-12-14 124 views
4

我正在使用mingw-w64。我包括strsafe.h並得到以下警告:如何擺脫「內聯函數使用但從未定義」警告g ++

我用
warning: inline function 'HRESULT StringCchPrintfA(STRSAFE_LPSTR, size_t, STRS 
AFE_LPCSTR, ...)' used but never defined [enabled by default] 

的唯一標誌標誌-Wall -DDEBUG -g。我知道你必須在同一個頭文件中定義內聯函數,我查看了strsafe.h,我清楚地看到頭文件中有StringCchPrintfA,所以我不知道爲什麼它給了我這個錯誤。另外,這裏是a link to strsafe.h if you want to look at the header yourself

編輯:

我發現下面的代碼片段在網上(如果有人能提供更多的信息,請讓我知道,什麼是試圖在註釋說?):

// Work around lack of strsafe library in mingw-w64, do let their 
// strsafe.h provide inlines of StringCchVPrintfA etc, avoid linking 
// errors in a debug build. 
#ifdef __CRT__NO_INLINE 
#undef __CRT__NO_INLINE 
#define DID_UNDEFINE__CRT__NO_INLINE 
#endif 
extern "C" { 

#endif 

#include <strsafe.h> 

#ifdef __MINGW32__ 
} 

#ifdef DID_UNDEFINE__CRT__NO_INLINE 
#define __CRT__NO_INLINE 
#endif 
#endif 
+0

是否有可能__CRT__NO_INLINE定義在某處,因此該函數並未實際定義? – tpg2114 2011-12-14 23:36:30

+0

@ tpg2114如果定義了___CRT__NO_INLINE,那麼`StringCchPrintfA`不會是內聯函數。 – 2011-12-14 23:38:50

回答

1

的評論表明應該有一個strsafe庫,但它不在那裏。定義__CRT__NO_INLINE必須意味着有一個編譯庫用於提供函數,而不是使用頭中的內聯函數。

因此,如果該庫不存在(但它似乎認爲它應該是),則允許使用內聯函數。

但是,這是爲了解決鏈接錯誤。編譯代碼時會出現鏈接錯誤嗎?或者你只是得到警告?如果你只收到警告,這意味着你實際上擁有安全庫。完全可能的是,沒有辦法消除消息並仍然使用函數的編譯版本。