有时候,需要将原本Windows下成功运行的C++代码移植到linux系统下,过程往往不是特别顺利,下面列出几个移植过程中需要注意的几个问题
1、#include<windows.h> 非win平台不能使用
2、#pragma once 避免同一个文件被包含多次,可移植性不好,linux下就会报错,还有一种相同功能的 是#ifndef是通用的,具体用法如下
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//中间为函数声明
#endif
ps:防止重复包含的两种方法
#pragma once 是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。
#ifndef,#define,#endif用来防止某个宏被多次定义。
3、二维verctor< vector<int>>,WIndows下可以,但是linux下必须改为 > >,中间多一个空格
4、 #include "stdafx.h" <direct.h>在linux下出错
5、#include <io.h> 出错 no such file ,解决方法 改为#include <sys/io.h>即可
6、#include <windef.h>,出错 no such file,该文件是宏定义相关文件,直接注释掉会造成min或者max等函数出出错,解决方法,改为include <algorithm>
7、std::fstream fw1(nameCodeResultsFile, std::ios::out);其中 nameCodeResultsFile 是一个string类型的文件名,需要改为 std::fstream fw1(nameCodeResultsFile.c_str(), std::ios::out);
8、查找文件代码段中涉及到window下的io.h文件中的查找文件的相关数据类型 _finddata_t 、_findfirst,这些在linux下是不存在的,不能使用
9、wall* pWall;在WIndows下没有问题,但是linux报错,指针必须初始化
10、windows下一个中文字符占2位,linux下一个中文字符占3位,就是在字符串或者数组中占3个位置
如有错误,欢迎留言~