2011-02-28 28 views
0

我正在通過一個名爲Mixer Host的蘋果示例項目。在回調函數中有幾行使用「 - >」語法來引用mBuffers,它是一個結構體。我認爲這是C++語法,但是這個文件有一個.m擴展名,我認爲它是C + Objective-C擴展。這實際上是C++語法?我可以將C++語法放入.m文件中,而無需使用Xcode將其重命名爲.mm。這是在一個Objective-C代碼文件中的C++嗎?

AudioUnitSampleType *outSamplesChannelLeft; 
AudioUnitSampleType *outSamplesChannelRight; 
outSamplesChannelLeft     = (AudioUnitSampleType *) ioData->mBuffers[0].mData; 
if (isStereo) outSamplesChannelRight = (AudioUnitSampleType *) ioData->mBuffers[1].mData; 

回答

3

不,這是非常有效的C.它是如何通過C和C++中的指針引用數據成員。

在C++中,你也可以用這種方式引用成員函數,但是看不到函數調用。

1

我不知道的Objective-C,但 「 - >」 一直用C,因爲他ķ& [R天。我確定它是有效的Objective-C。它不是C++的補充。

+0

謝謝,我一直在瀏覽我的編程C書,並沒有看到這種語法。 – Brennan 2011-02-28 16:21:59

0

假設AudioUnitSampleType是一個結構/類,它可以是C++或Objective-C。簡單地說,因爲純C在聲明變量(指針)時需要在其名稱前面聲明struct。它可能是其他任何東西。通常,Objective-C++文件具有.mm擴展名,除非您將Xcode更改爲將.m文件視爲Objective-C++(這不太可能)。所以這段代碼原來是Objective-C。

+0

您可以聲明'typedef struct foo foo'來將'struct foo'帶出struct命名空間,並在不帶'struct'關鍵字的情況下引用它。 – greyfade 2011-02-28 17:25:58

+0

@greyfade:哦,這就是爲什麼C程序員在做這個魔術:-)很高興知道。我是C++的人,我越瞭解C越多我不喜歡它。儘管公衆總是說「C/C++」......就像是在說「C/Cobol」。 – 2011-02-28 17:35:31