【问题标题】:Trouble including objective c code in an old c header在旧的 c 标头中包含目标 c 代码的问题
【发布时间】:2013-01-07 20:59:14
【问题描述】:

这主要是一个 xcode 问题。 我有一个带有小协议定义和单独 C 函数声明的 Objective-C 标头。我想将这几个标头声明合并到一个更大的文件中,该文件以前都是 C 代码,但 xcode 编译器抱怨。
似乎应该是可能的,因为包含这些声明的原始文件也是一个 .h 文件。是否有一个编译器标志我应该翻转以使我的旧头文件被识别为目标 C 头文件?

问题是,当我在目标 C 代码中包含旧标头时,我在目标 C 的部分(特别是 @protocol 和 @end 部分)上遇到错误。我想在不将目标 C 代码移出旧标头的情况下解决此错误。

@protocol ConnectorDelegate

-(void)connectorDidReturnValue:(int)value;
@end

initializeConnector(id<ConnectorDelegate> delegate);

我在@protocol 和@end 部分得到“预期标识符或'('”。

【问题讨论】:

  • 什么是“投诉”?请提供一些实际信息。

标签: objective-c xcode header compilation


【解决方案1】:

我可能会问您为什么要在 C 环境中执行此操作(也许您正在转向 Objective-C?),但我将专注于消除您的错误,以便您继续前进。

虽然您可能在头文件中工作,但它仍然包含在 C 源文件中。 C 对协议一无所知;他们是 Objective-C 的领域。

鉴于 Objective-C 是 C 的超集,您应该能够将包含此标头的文件的扩展名从 .c 更改为 .m 而不会产生不良影响,并且应该消除编译器错误.

编辑

您还可以使用#ifdef __objc__#endif 构建您的协议声明;这将提前更改 .c 文件的扩展名。

【讨论】:

  • 我在 .h 文件中遇到错误,因为该文件中包含 Objective-C 代码。当我在 xcode 中创建一个新对象时,我得到一个 .h 和 .m 对,在这种情况下,.h 文件中的 Objective-C 代码似乎没有问题。这让我觉得 xcode 对待两个 .h 文件的方式不同。
  • 对。而且您将该文件包含在 .c 文件中,不是吗?
  • 我将它包含在一个 .m 文件中。
  • 其实是多个文件,有些是.m,有些是.c
  • 由于目标 C 是 C 的超集,我不能告诉 xcode 将包含问题标头的 C 文件视为目标 C 文件吗?
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2017-03-23
相关资源
最近更新 更多