我是靠谱客的博主 懵懂战斗机,最近开发中收集的这篇文章主要介绍win cmd下g++编译cpp的那些坑一.编码大坑二.编译器g++在win和Linux下的不同表现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#这篇准备不定期长久更新,实在是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下的不同表现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部