如何摆脱g ++中使用的“内联函数但未定义”警告

时间:2011-12-14 23:31:48

标签: g++ inline compiler-warnings mingw-w64

我正在使用mingw-w64。我包括strsafe.h并收到以下警告:

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

1 个答案:

答案 0 :(得分:1)

评论表明应该有一个strsafe库,但它不在那里。 __CRT__NO_INLINE定义必须暗示某个地方有一个编译库来提供函数,而不是使用标题中的内联函数。

因此,如果该库不存在(但似乎应该是这样),则允许使用内联函数。

但是,这是为了解决链接错误。编译代码时是否会出现链接错误?或者你刚收到警告?如果您只收到警告,则表示您确实拥有strsafe库。完全合理的是,没有办法消除消息,仍然使用函数的编译版本。