Как избавиться от предупреждения «встроенная функция используется, но никогда не определяется» в g ++ - PullRequest
4 голосов
/ 15 декабря 2011

Я использую 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 в заголовке, поэтому я не знаю, почему это дает мне эту ошибку.Кроме того, здесь ссылка на strsafe.h, если вы хотите посмотреть заголовок самостоятельно .

Редактировать:

Я нашел следующеесниппет онлайн (если кто-нибудь может предоставить больше информации, пожалуйста, дайте мне знать, что вы пытаетесь сказать в комментарии?):

// 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 Ответ

1 голос
/ 15 декабря 2011

Комментарий указывает, что должна быть библиотека strsafe, но ее там нет.Определение __CRT__NO_INLINE должно подразумевать, что где-то есть скомпилированная библиотека для предоставления функций вместо использования встроенных из заголовка.

Итак, в случае, когда эта библиотека отсутствует (но, кажется, она так и думает), разрешите использовать встроенные функции.

Но это исправление ошибок компоновки.Вы получаете ошибки при компиляции кода?Или вы просто получаете предупреждение?Если вы получаете только предупреждение, это означает, что у вас действительно есть библиотека strsafe.Вполне вероятно, что нет способа удалить сообщение и по-прежнему использовать скомпилированную версию функции.

...