2 u013022149 u013022149 于 2016.01.29 17:30 提问

关于C语言跨平台编码问题

求助,如题,现在的系统又多又杂乱,想问一下,应该从哪个角度来分析C语言跨平台问题?
例如,想要编一个跨平台的小程序A,适用于目前所有的操作系统,也适用于32位和64位。
1. 怎么判断当前的系统平台?比如说这样?
if unix
if hp
else if solaris
else ?
else if linux
...
else windows
...
这样明显有点穷举的意思,怎么确保自己罗列的就是目前所有的在用的操作系统?

2.怎么判断当前是否需要引入不同的头文件来确保某些函数在任何系统下都能用?
意思是所有用到非标准头文件并且非自定义函数的都要考虑各个平台的处理?

3.C语言在不同环境下的编码不同是因为操作系统的原因还是因为使用的编译器的原因?意思是不同的编译器是不是就会有可能有不同的表现?

对跨平台基本没有了解,特意求教,希望各路大神指导一下。感激不尽。

3个回答

xyz347
xyz347   2016.01.29 17:50

平台相关的代码放OS目录里面

91program
91program   Ds   Rxr 2016.01.29 17:56

代码,基本上是无法判断操作系统的。因为要将C不语言编译成可以在不同的操作系统下运行的程序,需要不同的编译器的。
没有可能使用一个编译器,编译出可以在所有系统上运行的程序。
C语言,只是功能的实现语言,但它不是可以执行的机器码。

编码时,一般针对不同的操作系统使用不同的宏来区分,特别是要使用操作系统的一些特性时。
一样的对于非标准头文件,也可以使用宏来区分不同的操作系统

C语言实现的功能,基本上与编译器没有关系。除非是一些特殊的语法!但在编写跨平台的代码时,肯定不能使用这些特殊的语法。

oyljerry
oyljerry   Ds   Rxr 2016.01.30 11:54

可以看看各种开源跨平台代码,都是利用编译器的宏来判断os类型,然后定义不同代码来实现的。这个是成熟方案了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
纯C语言通用库(跨平台)
C语言通用库(跨平台)。 1.APR:Apache Portable Runtime 用于Apache服务器。 2.GLib:GNOME 用于开发桌面。 3.CF:Apple公司的基础库。 4.NSPR:Mozilla基金会用于客户端和红帽子服务器程序。
java语言和C语言的跨平台原理
java跨平台原理(优点:一次编译,到处运行) C语言跨平台原理:(优点:多次编译,到出运行)
C语言的跨平台性及库的跨平台性研究
啥?C语言是跨平台的?大家刚学C语言的时候,都知道C是不跨平台的。C的跨平台性从何说起?       呵呵,看官莫急,听Jeremiah徐徐道来。       本篇博客所讨论的跨平台性,是比较狭义的,主要是讨论跨Windows和Linux这两个最流行的操作系统,确切的说,是跨VC和gcc这两大编译器。在这也只是浅谈一下,不做太深入的研究。       主要内容如
转载至C语言中文网-跨平台条件编译
假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢? 这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出不同的平台。 Windows 有专有的宏_WIN32,Linux 有专有的宏__linux__,以现有的知识,我们很容易就想到了 if else,请看下面的代码: #i
跨平台C语言开源库总结
提供跨平台的C语言库,各类C、C++程序都可以用到其中的东西,已支持AIX、HP-UX、Solaris、FreeBSD、Linux、Mac OS X和Windows操作系统  本人辛苦了四年,颠覆多次,终成这个发布版,现在作为unix-center的开源项目,任何非册用户进入此链接都可以下载  有兴趣的先顶一下,便于后面的伙计看到此贴。  第二版主要增加了进程通讯的一些东西,包括线程,线程锁
c印记(十四):跨平台线程封装
一、缘起 不管是pc应用,服务端应用以及移动应用在编程过程当中几乎都会使用到线程相关的特性,而不同的操作系统可能会有不同的线程相关的API。比如类Unix系统上会有POSIX标准的pthread,windows上也有windows版的Pthread,但windows上并不是原生支持pthread,这样在使用的时候或多或少都会有一些性能,安全性上面的影响。再有就是一些rtos系统基本上都是task...
C语言 互斥锁 (跨平台 Windows+linux)pthread实现
互斥锁的主要目的是防止多个线程同时访问同一资源。为什么不允许多线程同时访问同一资源呢。首先我们要对程序在运算的过程。假如计程序要对一个变量执行自加运算,那么过程是:首先程序到这个变量的内存中拷贝走变量值,然后交给cpu,cpu计算后将计算结果返回,然后重新保存在原来的位置,从而实现了这个变量的自加运算。打个比方,有一个变量“tmp”,它当前的值为5,两个线程几乎同时要访问这个变量。线程a想执行tm
跨平台socket网络通信c语言实现
实现window与linux网络的传输时间测试,可以估计网络的速度,利用sendto、recvfrom、gettimeofdate实现。
C/C++中的内置宏定义及跨平台编程随笔
ANSI C标准中有几个标准预定义宏(也是常用的): __LINE__:在源代码中插入当前源代码行号; __FILE__:在源文件中插入当前源文件名; __DATE__:在源文件中插入当前的编译日期 __TIME__:在源文件中插入当前编译时间; __STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1; __cplusplus:当编写C++程序时该标识符被定义。 其他一些微软的C++编译器内置的宏定义可以参考:http://msdn.microsof
C语言编写的跨平台线程库
自己写的跨平台线程库 采用纯C编写 支持Windows、Linux、VxWorks5.5 请支持原创