WINDOWS函数,如何在linux下替换其他函数使用?!

fisheep_works 2013-01-17 02:01:05
请教各位师兄如何编写跨平台代码

#ifdef linux
return !strcasecmp(cKEY,cMacth);
#else
return !strcmp(cKEY,cMacth);
#endif


有没有更好的方法解决跨平台时函数不一致的问题?保持代码简洁?!
...全文
274 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fisheep_works 2013-01-17
  • 打赏
  • 举报
回复
谢谢各位指点
图灵狗 2013-01-17
  • 打赏
  • 举报
回复
没有更好的方法,基本上都需要包装一层,要想简洁的话,你可以从一开始就选择跨平台的Lib,这样相当于是别人已经帮忙把与系统相关的部分抽象出来了。
引用 楼主 fisheep_works 的回复:
请教各位师兄如何编写跨平台代码 C/C++ code?12345#ifdef linux return !strcasecmp(cKEY,cMacth);#else return !strcmp(cKEY,cMacth);#endif 有没有更好的方法解决跨平台时函数不一致的问题?保持代码简洁?! ……
pengfoo 2013-01-17
  • 打赏
  • 举报
回复
我们知道任何操作系统之上的应用程序的功能实现都依赖于操作系统API。基于这个认识,我们大概可以得到这样一个认识:任何的跨平台代码不过是对不同平台的操作系统的API的一层封装。现在以跨平台库gtk+的动态加载dll的函数g_module_open为例,我们可以设想一下它是如何实现以做到跨平台的。我们知道Windows平台下动态加载dll的函数是LoadLibrary, 而Linux平台动态加载共享库(在linux平台下习惯将动态链接库称为共享库)为dlopen。那么我们可以设想g_module_open大概可以这样实现: GModule * g_module_open(char* pszFileName,int Flag ) { #if defined _WINDOWS return LoadLibrary(pszFileName); #else #if defined _LINUX // 这里假设_LINUX为LINUX平台的标识宏 return dlopen(pszFileName, Flag); #endif #endif } 这里我们设想编写跨平台代码的关键在于在不同平台中找到实现相同功能的接口,然后在上面封装一层外壳供使用者调用。为什么我们说使用标准C能够实现跨平台?究其原因在于标准C是一个业界标准,在符合该标准不同的操作系统都已实现,相当于我之前提到的那层外壳。当然编写跨平台代码是有很多地方需要注意的,比如字节顺序(大端法机器还是小端法机器),字节对齐和填充等等,远不像我所说的那么简单。
pengfoo 2013-01-17
  • 打赏
  • 举报
回复
我们知道任何操作系统之上的应用程序的功能实现都依赖于操作系统API。基于这个认识,我们大概可以得到这样一个认识:任何的跨平台代码不过是对不同平台的操作系统的API的一层封装。现在以跨平台库gtk+的动态加载dll的函数g_module_open为例,我们可以设想一下它是如何实现以做到跨平台的。我们知道Windows平台下动态加载dll的函数是LoadLibrary, 而Linux平台动态加载共享库(在linux平台下习惯将动态链接库称为共享库)为dlopen。那么我们可以设想g_module_open大概可以这样实现:
 
GModule *  g_module_open(char* pszFileName,int Flag )
 {
 #if defined  _WINDOWS
    return LoadLibrary(pszFileName);
 
#else
    #if defined _LINUX     // 这里假设_LINUX为LINUX平台的标识宏
    return dlopen(pszFileName, Flag);
    #endif
 #endif 
 }
 
   这里我们设想编写跨平台代码的关键在于在不同平台中找到实现相同功能的接口,然后在上面封装一层外壳供使用者调用。为什么我们说使用标准C能够实现跨平台?究其原因在于标准C是一个业界标准,在符合该标准不同的操作系统都已实现,相当于我之前提到的那层外壳。当然编写跨平台代码是有很多地方需要注意的,比如字节顺序(大端法机器还是小端法机器),字节对齐和填充等等,远不像我所说的那么简单。
lee_鹿游原 2013-01-17
  • 打赏
  • 举报
回复
基本上大多数还是楼主这种写法。
fisheep_works 2013-01-17
  • 打赏
  • 举报
回复
这样呢?
#define stricmp     strcasecmp
帅得不敢出门 2013-01-17
  • 打赏
  • 举报
回复
没有。 或者直接用已经封装好的跨平台的库。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧