转自:https://blog.csdn.net/dj0379/article/details/53577135

linux编程与windows编程的差异之处:

1. 文件与目录的大小写以及路径分隔符的差别

windows下不区分大小写,路径分隔符一般使用"/";linux下区分大小写,路径分隔符使用"/"。

2. itoa()函数在linux下并不存在

所以使用类似sprintf();之类的函数是个不错的替代。(为什么说是类似函数,看下面一条啦)

3. _snprintf()与_vsnprintf()的差别

sprintf()不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf()。

int _snprintf(
char * buffer,
size_t count ,
const char * format [ ,
argument] . . .
) ;

例如,要把c2字符串write给c1,比较安全的用法:

char c1[ ] ;
c1[ sizeof ( c1) - ] = ;
_snprintf( c1, sizeof ( c1) , "%s" , c2) ;
if ( c1[ sizeof ( c1) - ] ! = )
{
cout < < "warning: string is truncated" ) < < endl ;
c1[ sizeof ( c1) - ] = ;
}

如果在write之前主动检查一下c2的长度再申请c1的空间当然是最好的。

4. 在linux下并不存在std::exception(char*),可以使用logic_error类型代替exception

5. 尽量使用STL与标准C库,并且要按照标准C++语法来写程序

比如这种用法list< type1<T0> >::iterator iter;在windows下的编译器下没有编译错误;但在linux下,就需要在前面增加typename才能顺利编译通过。

6. 在源文件最后多加一个或几行的空行,以免蹦出警告:"no newline at end of file"

7. windows中对ini文件进行操作的所有函数在linux下都没有对应函数

建议自己写一个操作ini文件的类,在STLChina上有一个使用stl制作这种类的原理介绍和一小段代码片段,自己扩充一下。

8. SOCKET对象集要使用fd_set,不要使用FD_SET

9. stricmp()函数,在linux下用strcasecmp()函数替换

10. 在linux下不存在INVALID_SOCKET、INVALID_HANDLE_VALUE、SOCKET_ERROR、MAX_PATH、INFINITE、STILL_ACTIVE等宏定义

11. 参数要求为char*的时候别忘了给传进去的string加一个.c_str()函数

12. linux下不存在目录操作时要包含的direct.h与io.h头文件,而要包含相应的unistd.h与fcntl.h头文件

13. filelength()函数在linux也不存在,可以通过fstat()函数来替代

使用文件与目录操作函数,不要使用类似_access带下划线的函数,取而代之有access函数可以通用。

14. #prgram once预编译指令在linux下并不起作用,请使用以下标准方式来解决头文件多次包含问题 :

# ifndef _XXXXX_H_
# define _XXXXX_H_
# endif

15. hash_map出现在后期版本的stl库,为兼顾hasp与tree map,请可以通过以下宏来解决 :

// process hash_map

# if defined( _MSC_VER)
# if _MSC_VER > =
// hasp_map not standard Container # pragma warning( disable: )
# include < hash_map>
// we believe _STLP_STRING included means using STLPORT # elif defined( _STLP_STRING)
# include < hash_map>
# else
# define hash_map map
# endif
# endif

16. 为了区别不同OS,一般可用的几个宏有:WIN32,__linux__,需要使用与OS相关的内容,请一定用开关来写

17. 对于界面操作部分代码,一定要把它与程序逻辑核心代码用宏分开来,这样的代码才好移植,不要交错

18. 不要假定可执行文件一定有如.exe的扩展名

19. 在父类中用typedef定义的类型,在子类并不能直接使用

20. long类型的变量在32位和64位Windows上都是4个字节,而在64位Linux系统上占8字节。

另附:

linux网络编程常用头文件:

sys/types.h:数据类型定义

sys/socket.h:提供socket函数及数据结构

netinet/in.h:定义数据结构sockaddr_in

arpa/inet.h:提供IP地址转换函数

netdb.h:提供设置及获取域名的函数

sys/ioctl.h:提供对I/O控制的函数

sys/poll.h:提供socket等待测试机制的函数

其他在网络程序中常见的头文件 
unistd.h:提供通用的文件、目录、程序及进程操作的函数

errno.h:提供错误号errno的定义,用于错误处理

fcntl.h:提供对文件控制的函数

time.h:提供有关时间的函数

crypt.h:提供使用DES加密算法的加密函数

pwd.h:提供对/etc/passwd文件访问的函数

shadow.h:提供对/etc/shadow文件访问的函数

pthread.h:提供多线程操作的函数

signal.h:提供对信号操作的函数

sys/wait.h、sys/ipc.h、sys/shm.h:提供进程等待、进程间通讯(IPC)及共享内存的函数

在编写网络程序时,可以直接使用下面这段头文件代码

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <fcntl.h>

涉及到用户权限及密码验证问题时加入如下语句:
#include <shadow.h>
#include <crypt.h>
#include <pwd.h> 
需要注意的是,应该在编译时链接加密算法库,即增加编译选项:
-lcrypt

涉及到文件及时间操作加入如下语句: 
#include <sys/time.h>
#include <utime.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/file.h>

涉及到多进程操作时加入如下语句: 
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>

涉及到多线程操作时加入如下语句: 
#include <pthread.h>
#include <sys/poll.h>
需要注意的是,应该在编译时链接线程库,即增加编译选项:-lthread

[转][c++][跨平台]c++跨平台开发小结的更多相关文章

  1. [ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP

    前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 关注订阅号:TongeBlog ,查看移动端跨平台 ...

  2. 移动跨平台开发框架Ionic开发一个新闻阅读APP

    移动跨平台开发框架Ionic开发一个新闻阅读APP 前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. ...

  3. Unity3D ——强大的跨平台3D游戏开发工具(六)

    第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...

  4. 使用Xamarin实现跨平台移动应用开发(转载)

    刚在朋友圈看到张善友,转发的一条分享“使用Xamarin实现跨平台移动应用开发”,写的确实很详细得体,从收费到开源,这段时间xamarin受到不少质疑,如此文http://blog.csdn.net/ ...

  5. Vagrant - 打造跨平台的一致开发环境

    官网 参考资料 借助 Vagrant ,可以使用 Vagrantfile 文件自动化虚拟机的安装和配置流程,方便快速的打造跨平台的统一开发环境. 1. Vagrant 是啥 Vagrant 用于构建及 ...

  6. vue开发小结(下)

    前言 继前几天总结了vue开发小结(上)后,发现还有很多的点没有能列举出来,于是还是打算新建一个下篇,再补充一些vue开发中需要注意的细节,确实还是都是细节的问题,我只是在这里强调下,希望对大家有帮助 ...

  7. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

  8. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  9. Android 即时通讯开发小结(一)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  10. 5Spring动态代理开发小结

    5Spring动态代理开发小结 1.为什么要有动态代理? 好处 1.利于程序维护 2.利于原始类功能的增强 3.得益于JDK或者CGlib等动态代理技术使得程序扩展性很强 为什么说使得程序扩展性很强? ...

随机推荐

  1. Struts2 的 配置

    三.Struts2配置 Struts2的核心配置文件 1.名称和位置是固定的   在src下struts.xml 2.Struts根标签 Package Action Result Action Pa ...

  2. spring中的springSecurity安全框架的环境搭建

    首先在web.xml文件中配置监听器和过滤器 <!--监听器 加载安全框架的核心配置文件到spring容器中--> <context-param> <param-name ...

  3. Mysql报错java.sql.SQLException:null,message from server:"Host '27,45,38,132' is not allowed to connect

    Mysql报错java.sql.SQLException:null,message from server:"Host '27,45,38,132' is not allowed to co ...

  4. Eclipse中手动清理项目缓存,

    用过Eclipse或MyEclipse的小伙伴肯定遇到过这种情况: 代码出错后,在前台访问出问题.然后把代码改好,已经检查不到错误,可是项目在前台访问还是有问题. 这个时候,可能就是Eclipse/M ...

  5. CentOS 7 install slurm cluster

    //slurm install //CentOS 7 system //192.168.159.141 node01 //192.168.159.142 node02 systemctl stop f ...

  6. JUnit Parametrized Tests

    Junit allows us to create parametrized tests. Parametrized test class has to be annotated with the @ ...

  7. Junit的异常测试

    方式1: @Test(expected = IndexOutOfBoundsException.class) public void empty() { new ArrayList<Object ...

  8. upc组队赛1 闪闪发光 【优先队列】

    闪闪发光 题目描述 一所位于云南昆明的中医药本科院校--云南中医学院. 因为报考某专业的人数骤减,正面临着停招的危机. 其中有九名少女想到一条妙计--成为偶像, 只要她们成为偶像,学校的名气便会增加, ...

  9. 如何安装整个linux系统中所需要的mp3播放库插件? 可以在安装rpmfusion仓库后直接通过dnf install进行按照就可以了

    在vi的界面中, 前面的数字, 表示一行. 而对于中文而言, 并不一定是"一个文本行"就是一行, 而是以 回车(硬回车)为标志, 来判定一行的. 而dd, yy等也是以" ...

  10. Almost Union-Find (并查集+删除元素)题解

    思路: 当时只有暴力的思想,1.3都很好达到,只要加一个sum[ ]和num[ ]就可以,但是2比较麻烦,不知道谁以p为根,就想直接扫描然后一个个和p脱离关系,果然超时emmm.通常的想法是我们先用一 ...