2011-08-23 28 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語言之外,它是一樣的。