概述
#这篇准备不定期长久更新,实在是win下的坑太多,做个记录方便日后查看。
#有人看到了,觉得特别不爽的热烈欢迎评论补充。
#先准备零散写,碰到什么些什么,积累多了再系统整理。
一.编码大坑
1.在win cmd下用g++直接编译编码格式为utf-8的原文件时,需要原文件中的源码里不能有中文,准确的说遇到的问题是不能cout直接输出中文。只要有中文输出,运行时就会跳过(经过测试不是跳过是因字体编码问题不显示),或者在中文输出后面有cin输入操作会直接跳过之后的所有程序。
一下给一段简单例子说明:
#include<iostream>
using namespace std;
int main()
{
cout<<"hello world"<<endl;
cout<<"1 pleace enter two number"<<endl;
int a, b;
cin>>a>>b;
cout<<a<<" * "<<b<<" = "<<a*b<<endl;
cout<<"你好世界!"<<endl; //这里向外输出中文
cout<<"2 pleace enter two number"<<endl;
cin>>a>>b;
cout<<a<<" * "<<b<<" = "<<a*b<<endl;
return 0;
}
win cmd运行结果:
可以看到在输出中文之前的代码都是正常运行,到了输出中文后,就出了问题。
同样的代码在Linux下g++编译utf-8文件,输出中文对程序无任何影响。
Linux下运行结果:
解决方案:在win下把文件编码格式从utf-8转换成cp936,再在win cmd用g++编译就会正常运行。
例如:在vim命令模式下输入:set fileencoding=cp936 然后保存即可。
经验: 在win cmd下编写c++程序最好还是在编码cp936下完成。
在Linux下当然是用utf8了。
未完待续……
二.编译器g++在win和Linux下的不同表现
1.在函数传递字符参数时的不同表现
例如如下代码:
string fileName;
cin<<fileName; //让用户输入一个文件文件名
ofstream outfile(fileName.c_str(), ios::out); //在传的第一个参数中,在Linux下是需要用string中的.c_str()转换成char<> ,而在win下却不用转换也可以!!!
在Linux下不加.c_str()的结果:
可以看到,是类型转换的问题。然而,在win下不加也可以编译通过正常运行。(这东西书上可不写。。哎,踩坑进行中…)
解决办法:不管是在win还是Linux下还是都要用.c_str()进行转换。
纵然win下是可以通过,理论上还是要转换的,按照规则来吧,win下就当是意外。。
待续……
最后
以上就是懵懂战斗机为你收集整理的win cmd下g++编译cpp的那些坑一.编码大坑二.编译器g++在win和Linux下的不同表现的全部内容,希望文章能够帮你解决win cmd下g++编译cpp的那些坑一.编码大坑二.编译器g++在win和Linux下的不同表现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复