_带有mingw和c++0x的stricmp不存在

_stricmp with mingw and c++0x not existent?

本文关键字:stricmp 不存在 c++0x 带有 mingw      更新时间:2023-10-16

我目前正尝试将谷歌测试与MinGW和-std=c++0x一起使用,但它抱怨_stricmp is not declared in this scope,而当我不使用-std=c++0x时,它没有。我不知道_stricmp是什么,我只是发现它是在cstring/string.h中定义的,那么为什么它在C++0x中消失了呢?

-std=c++0x选项会使g++进入"严格ANSI"模式,因此它不会声明非标准函数(而_stricmp()是非标准的,它只是strcmp()的一个不区分大小写的版本)。

请改用-std=gnu++0x

除了Michael的解决方案外,还有其他方法可以覆盖strict ANSI模式。在有编译问题的文件中包含以下内容之前:

#ifdef __STRICT_ANSI__
#undef __STRICT_ANSI__
#endif

这不仅有助于_stricmp,也有助于其他常见功能,如swptintfvswprintf和simmilar。

您可以看看MinGW-w64,它允许我使用-std=c++11运行Google测试(也可以与您的-std=c++0x一起使用)。它消除了_stricmp、_strdup等问题。

我也遇到过完全相同的问题,但对我来说,这是因为我在include路径中有一个文件String.h,它是由预处理器获取并使用的,而不是标准的。由于此线程而找到。