C++跨平台开发心得小结
来源:互联网 发布:智能管家机器人软件 编辑:程序博客网 时间:2024/06/16 21:54
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[ 256] ;
c1[ sizeof ( c1) - 1] = 0;
_snprintf( c1, sizeof ( c1) , "%s" , c2) ;
if ( c1[ sizeof ( c1) - 1] ! = 0)
{
cout < < "warning: string is truncated" ) < < endl ;
c1[ sizeof ( c1) - 1] = 0;
}
如果在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 > = 1300
// hasp_map not standard container
# pragma warning( disable: 4996)
# 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字节。
- C++跨平台开发心得小结
- C++跨平台开发心得小结
- C++跨平台开发心得小结
- Web开发心得小结
- 跨平台开发c++,
- 跨平台C++程序开发经验小结
- 跨平台C++程序开发经验小结
- 跨平台C++程序开发经验小结
- Flex程序开发心得小结
- Eclipse 插件开发心得小结
- [心得] 搭建MTK开发平台
- UCML开发平台使用心得
- C++跨平台手机开发的一点心得
- 平台设备相关开发小结
- ST 平台上硬件解码开发心得
- 跨平台编程资源,c & c++开发
- 跨平台编程资源,c & c++开发
- 跨平台C/C++开发的总结
- 《PL/SQL 语言开发参考手册》之五:PL/SQL 游标
- android intent和intent action大全(转http://www.cnblogs.com/playing/archive/2010/09/15/1826918.html)
- Linux系统手动安装rz sz 软件包
- [数据库字典]简单的3个SQL视图搞定所有SqlServer数据库字典
- amf抓包利器:Charles
- C++跨平台开发心得小结
- tomcat日志分析工具awstats配置
- 在usercontrol里动态添加ScriptManager
- 精彩PuTTY 中文教程
- Linux虚拟机安装
- getRealPath
- 数组元素随机排序
- 123123
- mysql4以后出现的sql语句