Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码过于依赖编译器_C_Compiler Construction_Posix - Fatal编程技术网

C代码过于依赖编译器

C代码过于依赖编译器,c,compiler-construction,posix,C,Compiler Construction,Posix,我正在编写一个操作系统,该操作系统应该运行在多种平台上(例如:Xilinx Zync、飞思卡尔QorIQ)。 我的问题是,并非所有提供的ide(由Xilinx、Freescale等提供)都提供相同的库(标准C&POSIX库)。 例如,CodeWarrior IDE具有timespec结构,而Xilinx没有。 另外,sleep在提供的一些lib中实现,但我有自己的实现 我希望我的代码独立于编译器(一些制造商提供多个IDE,并使用不同的编译器) 有什么建议吗?简单(尽管实施时间较长)的解决方案是不

我正在编写一个操作系统,该操作系统应该运行在多种平台上(例如:Xilinx Zync、飞思卡尔QorIQ)。 我的问题是,并非所有提供的ide(由Xilinx、Freescale等提供)都提供相同的库(标准C&POSIX库)。 例如,CodeWarrior IDE具有timespec结构,而Xilinx没有。 另外,
sleep
在提供的一些lib中实现,但我有自己的实现

我希望我的代码独立于编译器(一些制造商提供多个IDE,并使用不同的编译器)


有什么建议吗?

简单(尽管实施时间较长)的解决方案是不依赖供应商提供的库。编写自己的库。也许这可以通过一点分层来完成。例如,它们都提供了strlen()。

我的建议:按照POSIX标准编写代码。如果供应商库没有达到POSIX标准,那么自己实现一个POSIX层


让核心操作系统通常不受约束,并将混乱放在有条件编译的兼容层中。

当所有其他操作都失败时,
#ifdef
是你的朋友。如果你找到了解决这个问题的好办法,你将获得诺贝尔奖。如果你在理论上甚至没有POSIX,你应该坚持C标准的要求;实际上,这还不够(例如,标准中没有
睡眠
),或者,如果您在嵌入式系统上工作,它甚至可能没有完全实现。享受
#ifdef
s带来的乐趣。但是#ifdef来得太早了。如果我有两个编译器,一个实现sleep,另一个不实现sleep,#ifdef将无关紧要……您是否建议干预ide设置(所有相关ide)并使用我自己的实现?我应该相信吗?(有这样的指南吗?@John:当然有。IDE仅用于编辑器和编译框架。关闭其所有库并提供自己的库。