我似乎无法通过谷歌搜索找到这个问题的答案。我能否假设Objective-C预处理器的工作原理与C预处理器完全相同,并且我读到的有关C预处理器的任何内容在Objective C环境中的应用方式完全相同?还是有微妙的差异?标准C预处理器和Objective-C预处理器之间是否存在差异?
1
A
回答
2
有一些细微的差别:
- 包含路径是您所使用的语言不同,这取决于。
- 我相信如果你不使用ObjC,
#import
会触发警告。 - 预处理器可能有一些特殊情况来处理ObjC
@"string"
语法。 - 而且,当然,最重要的是,该语言会影响哪些宏是预定义的(例如,
__objc__
)。
它仍然cpp
无论哪种方式,虽然 - 它只是在不同的模式下运行。
3
来自Apple的official documentation指出Obj-C是该语言的一个小超集。据我所知,预处理器与常规C相同(无论如何,它都基于相同的开源组件)。 GCC编译器(在其他地方使用)和相关工具也是如此;我会认为LLVM是一样的,但我不能为后者说话。
值得注意的是#pragma
s,但是他们再次意味着依赖于实现。
0
这是相同的预处理器。你可以看看Clang或GCC的源代码,如果你想亲眼看看 - 就我所知,除了使用Objective-C词法分析器而不是C语言之外,它是一样的。
相关问题
- 1. C++预处理器
- 2. Xcode中的预处理器忽略目标预处理器宏
- 3. 是否存在处理预处理器指令并给出实际预处理器输出的工具?
- 4. 预处理器时间戳
- 5. 过滤器是否用于预处理和后处理?
- 6. 预处理器,后处理器,几何处理器和NC处理器
- 7. 预处理器错误C++
- 8. C++,预处理器语句
- 9. C预处理器宏
- 10. C++定义预处理器
- 11. C#预处理器指令
- 12. C++预处理器定义
- 13. C预处理器概念
- 14. C++预处理器变量
- 15. 调试C++预处理器
- 16. 舍入C预处理器
- 17. 推送C++预处理器
- 18. C代码预处理器
- 19. C预处理器Mac OS
- 20. C++预处理器__typeof
- 21. 预处理器基于C
- 22. C预处理器警卫?
- 23. C++ #define预处理器
- 24. Qt的moc预处理器需要所有C++预处理器标志
- 25. 评论总是在预处理器之前处理?
- 26. YAML预处理器/宏处理器
- 27. C++模板和C预处理器
- 28. c中的翻译器和预处理器是否一样?
- 29. 间接预处理器替换C
- 30. Interface Builder和预处理器
这似乎不是一个好的答案。 “我相信......”和“预处理器可能......”。这还不够明确。对于@符号,预处理器似乎不会替代它们,因此编译器必须处理它们 – Rhubarb
WRT。 @符号,预处理器有点意识到双引号字符串(例如,它不会替代宏或剥离它们中的注释),并且将相同的意识应用于“@”“字符串。我不确定是否这是因为预处理器已经被“教”了这些字符串,或者因为它不关心,但是无论哪种方式,结果都是一样的。 WRT。 '#import'警告,这只是编译器传递给'cpp'的选项的区别。 – duskwuff