2011-12-14 2 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

+0

@ tpg2114 ___CRT__NO_INLINE이 정의되면,'StringCchPrintfA'는 인라인 함수가 될 수 없습니다. –

+0

나는 동의하지 않는다 - 당신이 올린 헤더에 대한 링크에는'#define STRSAFEAPI static __inline HRESULT WINAPI'가있다. 그래서이 함수는 __CRT__NO_INLINE의 상태에 관계없이'static __inline'이다. – tpg2114

답변

1

을 주석은 strsafe 라이브러리가 있어야한다는 것을 나타내지 만 거기에 없습니다. __CRT__NO_INLINE 정의는 헤더에서 인라인 된 것을 사용하는 대신 함수를 제공 할 수있는 컴파일 된 라이브러리가 있다는 것을 의미해야합니다.

따라서 해당 라이브러리가없는 경우 (하지만 그래야한다고 생각되는 것 같습니다) 인라인 함수를 사용할 수있게하십시오.

그러나 이것은 링크 오류를 수정하기위한 것입니다. 코드를 컴파일 할 때 링크 오류가 발생합니까? 아니면 그냥 경고를 받으시겠습니까? 경고 만받는다면 사실은 strsafe 라이브러리가 있다는 의미입니다. 메시지를 없애고 컴파일 된 버전의 함수를 사용하는 방법이 없다는 것은 전적으로 그럴듯합니다.

+0

+1 : 도움에 감사드립니다. 나는'strsafe.h'를'#undef __CRT__NO_INLINE'과'#define __CRT__NO_INLINE'으로 감싸기로 결정했습니다. 다른 정보는 [this] (http://www.mail-archive.com/[email protected]/msg03658.html)입니다. 또한 Microsoft는 링크 할 수있는'strsafe.lib' 파일을 가지고 있지만 Mingw-w64는이 파일을 가지고 있지 않으므로 주석의 내용을 이해할 수 있습니다. –