如何编写跨平台C/C++代码的一些断想

Posted explorer101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写跨平台C/C++代码的一些断想相关的知识,希望对你有一定的参考价值。


                              朱金灿


我们知道任何操作系统之上的应用程序的功能实现都依赖于操作系统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是一个业界标准,在符合该标准不同的操作系统都已实现,相当于我之前提到的那层外壳。当然编写跨平台代码是有很多地方需要注意的,比如字节顺序(大端法机器还是小端法机器),字节对齐和填充等等,远不像我所说的那么简单。


以上是关于如何编写跨平台C/C++代码的一些断想的主要内容,如果未能解决你的问题,请参考以下文章

编写可移植 C/C++ 程序的一些要点

干货 | 编写可移植C/C++程序的一些要点

编写可移植 C/C++ 程序的一些要点

如何编写 vb.net 代码来编译 C/C++ 程序?

如何在 Linux 上用 C/C++ 编写 Web 服务器 [关闭]

C语言如何在编写的程序中插入图片