MinGW Developer Studio 2.05使用g++编译器版本是mingw-gcc-3.3.1
Dev-C++ 4.9.9.2用的g++编译器版本可能是mingw-gcc-3.4.2
Linux安装的是Gcc4.3.2(20070920)
案例一:Hx
用Dev编译class template报错,改用MinGW之后编译通过。
案例二:Gsp
用c语言写程序模仿UNIX环境中bc命令的基本功能,其中我用到数学函数sin,cos,#include
情况如下:
KDE编译:sin和cos未定义
Dev编译:通过
Mingw编译:isspace未定义
解决:
KDE:百度之后,在编译选项中加入-lm,链接数学库后通过。对于数学库其他编译器默认都链接了。
Mingw:没办法,只好用isblank替换isspace。
案例三:Gsp
Gcc不同版本之间的差异
下面的代码片段:
引用:void LogAnalyse::StopAnalyse()
{ INETH.close(); }
void LogAnalyse::Initialize()
{ FileOpen(INETH, ineth.c_str(), std::fstream::in); }
void LogAnalyse::FileOpen(fstream& file, const char* name, std::_Ios_Openmode flag)
{
if (file)
file.close();
file.open(name, std::fstream::in);
if (!file)
cerr << "Error: unable to open file " << name <<"\n";
}
注:INETH是类LogAnalyse的成员变量,一个fstream对象。
运行时的调用顺序是Initialize()->StopAnalyse()->Initialize(),文件INETH打开,关闭,再打开。
现象:用gcc4.3.2(20070920)编译后运行正常,在另一台电脑用gcc3.4.6(20060420)编译运行,打开关闭正常,再打开就出现错误Error: unable to open file...
解决:把代码
引用:if (!file)
cerr << "Error: unable to open file " << name <<"\n";
改为
引用:if (file == NULL)
cerr << "Error: unable to open file " << name <<"\n";
运行正常。