gpt4 book ai didi

c - 宏 posix_c_source

转载 作者:行者123 更新时间:2023-11-30 15:06:40 26 4
gpt4 key购买 nike

我有原始代码,可以使用 gcc 在 Windows 和 Linux 中进行编译。即使在 cygwin 下也能正常工作。现在,当我尝试为 iOS 进行编译时

echo $OSTYPE
darwin14

一切看起来都很好,并且成功获得了构建。但是,当我尝试运行 CUI 应用程序时,会显示一条消息段错误 11

经过几天的互联网搜索,我偶然发现了这个link .

因此,我在其中一个 *.c 文件中进行了以下更改

-#define _POSIX_C_SOURCE 199309
+#define _POSIX_C_SOURCE 199506

新版本运行良好。虽然我不是程序员,但我想知道这两个宏之间有何显着差异?您能否评论一下为什么这种变化变得如此重要。

最佳答案

虽然只有1行代码,但是可能会有很大的不同,POSIX是一个标准,它定义了操作系统和应用程序之间的接口(interface),并且它有很多不同的版本(你可以认为它类似于硬件USB标准,它有很多版本,例如USB 1.0和USB 2.0)。

有时程序员无法确定程序将在哪个平台上运行,它可能运行在Linux上,可能运行在Windows上,也许系统提供旧的标准接口(interface),也许是新的。

所以,程序员添加这种宏,为许多不同的接口(interface)编写代码,例如,这样的源代码:

#define WIN
#ifdef WIN
<part 1:1000 lines of code>
#endif
#ifdef LINUX
<part 2:1000 lines of code>
#endif
<1000 lines that not depend on system , can both run on Linux and Windows.>

编译器将编译第 1 部分(丢弃第 2 部分),但是当您将 #define WIN 更改为 #define LINUX 时,它将包含第 2 部分(并丢弃部分1)!你可能认为你只改变了 1 行,但编译器可能会选择或丢弃数千行(可能更多,可能更少,这取决于代码)

关于c - 宏 posix_c_source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38866686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com