我似乎無法通過谷歌搜索找到這個問題的答案。我能否假設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