我目前正在尝试使用Googletest与MinGW和-std=c++0x,但它抱怨说,_stricmp is not declared in this scope,当我不使用-std=c++0x时,它不会。我不知道_stricmp是什么,我只是发现它是在cstring/string.h中定义的,那么为什么它在C++0x中消失了?
-std=c++0x
_stricmp is not declared in this scope
_stricmp
cstring/string.h
sxpgvts31#
-std=c++0x选项使g++进入“strict ANSI”模式,这样它就不会声明非标准函数(_stricmp()是非标准的--它只是strcmp()的一个不区分大小写的版本)。请改用-std=gnu++0x。
_stricmp()
strcmp()
-std=gnu++0x
oymdgrw72#
除了Michael的解决方案外,还有其他方法可以覆盖strict ANSI模式。在出现编译问题的文件中的任何include之前包含以下内容:
strict ANSI
#ifdef __STRICT_ANSI__ #undef __STRICT_ANSI__ #endif
这不仅对_stricmp有帮助,对swptintf、vswprintf和simmilar等其他常见函数也有帮助。
swptintf
vswprintf
2izufjch3#
您可以查看一下MinGW-w64,它允许我使用-std=c11运行Google测试(也适用于您的-std=c0x),它消除了_stricmp、_strdup等的问题。
8ljdwjyq4#
我也遇到过同样的问题,但对我来说,我有一个包含路径中的文件String.h,它被预处理器拾取并代替标准的文件使用。
String.h
4条答案
按热度按时间sxpgvts31#
-std=c++0x
选项使g++进入“strict ANSI”模式,这样它就不会声明非标准函数(_stricmp()
是非标准的--它只是strcmp()
的一个不区分大小写的版本)。请改用
-std=gnu++0x
。oymdgrw72#
除了Michael的解决方案外,还有其他方法可以覆盖
strict ANSI
模式。在出现编译问题的文件中的任何include之前包含以下内容:这不仅对
_stricmp
有帮助,对swptintf
、vswprintf
和simmilar等其他常见函数也有帮助。2izufjch3#
您可以查看一下MinGW-w64,它允许我使用-std=c11运行Google测试(也适用于您的-std=c0x),它消除了_stricmp、_strdup等的问题。
8ljdwjyq4#
我也遇到过同样的问题,但对我来说,我有一个包含路径中的文件
String.h
,它被预处理器拾取并代替标准的文件使用。