什么是"重新定义'组'"错误?

ohh*_*hho 0 ios ios7.1 xcode5.1

我在Xcode 5.1 vanilla单视图项目中添加了两个文件:

table.h

struct group {
    int size;
};
Run Code Online (Sandbox Code Playgroud)

table.c

#include "table.h"
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

Semantic issue
table.h:2:8: Redefinition of 'group'
Run Code Online (Sandbox Code Playgroud)

"以前的定义"是:

iOS 7.1 > usr/include > grp.h
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这grp.h会自动包含在我的项目中.我怎么能包括它?

dpa*_*age 5

grp.h是标准的Unix级文件之一,它定义了一些基本的数据结构; 在这种情况下,struct group是处理用户权限的低级C函数返回的内容.

至于为什么它包含在你的项目中的问题:当你在Xcode中创建一个新项目时,它会创建一个包含文件,隐含地包含在项目的每个.m.c文件中.在我刚刚创建的项目中尝试了这个,它位于文件浏览器中的一个叫做Supporting Files名字的组中[project]-Prefix.pch.我的内容如下:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif
Run Code Online (Sandbox Code Playgroud)

倒数第二行,#import <Foundation/Foundation.h>然后包括所有内置的Objective-C对象NSObject,NSArray以及一些与文件系统一起工作的东西,因此需要能够处理权限和组成员身份.其中一个包括grp.h.

因此,回到您的问题 - 您可以将.pch文件更改为不包含Foundation/Foundation.h,然后手动将其包含在您需要的任何位置.

但这最终会减慢所有构建速度..pch这里的文件很特别; Xcode将其编译一次并以二进制格式保存,因此它不必解析为您构建的每个文件扩展的数千行C代码.

我的建议?为结构命名别的东西.