2011-08-23 26 views

回答

2

有一些细微的差别:

  • 包含路径是您所使用的语言不同,这取决于。
  • 我相信如果你不使用ObjC,#import会触发警告。
  • 预处理器可能有一些特殊情况来处理ObjC @"string"语法。
  • 而且,当然,最重要的是,该语言会影响哪些宏是预定义的(例如,__objc__)。

它仍然cpp无论哪种方式,虽然 - 它只是在不同的模式下运行。

+0

这似乎不是一个好的答案。 “我相信......”和“预处理器可能......”。这还不够明确。对于@符号,预处理器似乎不会替代它们,因此编译器必须处理它们 – Rhubarb

+0

WRT。 @符号,预处理器有点意识到双引号字符串(例如,它不会替代宏或剥离它们中的注释),并且将相同的意识应用于“@”“字符串。我不确定是否这是因为预处理器已经被“教”了这些字符串,或者因为它不关心,但是无论哪种方式,结果都是一样的。 WRT。 '#import'警告,这只是编译器传递给'cpp'的选项的区别。 – duskwuff

3

来自Apple的official documentation指出Obj-C是该语言的一个小超集。据我所知,预处理器与常规C相同(无论如何,它都基于相同的开源组件)。 GCC编译器(在其他地方使用)和相关工具也是如此;我会认为LLVM是一样的,但我不能为后者说话。

值得注意的是#pragma s,但是他们再次意味着依赖于实现。

0

这是相同的预处理器。你可以看看Clang或GCC的源代码,如果你想亲眼看看 - 就我所知,除了使用Objective-C词法分析器而不是C语言之外,它是一样的。