OS X 的“发送”冲突类型

Leo*_*Leo 2 c macos xcode clang

我在使用 Xcode 6.2 在 OS X 10.10 上编译代码时遇到一些问题。

Apple LLVM 版本 6.0 (clang-600.0.57)(基于 LLVM 3.5svn)

目标:x86_64-apple-darwin14.1.0

我的程序很简单。头文件header.h

int send();
Run Code Online (Sandbox Code Playgroud)

我将此标头包含在main.c

#include <stdio.h>
#include "header.h"

int main(int argc, const char * argv[]) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,出现以下错误:

.../header.h:12:5:“发送”类型冲突 .../main.c:2:10:在 .../main.c:2 包含的文件中:/Applications/Xcode.app /Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/socket.h:574:9:先前的声明位于此处

ssize_t send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send);
Run Code Online (Sandbox Code Playgroud)

为什么我在不包含 的情况下收到此错误socket.h?我知道解决方案可以是重命名send函数,但我把我的卡片放在桌子上,这是我的作业,我必须仅使用上述声明在 Linux 上编写它。但我想在Mac上编译它。我还可以创建一些宏来检查操作系统并仅在 OS X 上重命名我的函数。问题是我稍后会得到一些静态库,并且此解决方案将不起作用。有什么建议么?也许我有一些错误的编译选项或 Xcode 设置?请帮忙

Dai*_*jan 5

Clang 在命令行上有效:
clang main.c

问题是 xcode 的 ModuleCache。这似乎显然为您包含了很多东西:D它将以下标志传递给 clang:
-fmodules -fmodules-cache-path=/Users/dpich/Library/Developer/Xcode/DerivedData/ModuleCache -fmodules-prune-interval=86400 -fmodules-prune-after=345600

如果您在构建设置中禁用它,它可以正常编译:
在此输入图像描述