Betrachten Sie die folgende Quelldatei, die gültig ist C.Wenn Objective C eine strenge Obermenge von C ist, warum kompiliert das dann nicht?
void id() {
}
(zumindest sollte)
Ich versuche es mit gcc -c test.m
zu kompilieren, aber ich erhalte den folgenden Fehler:
test.m:1: error: ‘id’ redeclared as different kind of symbol
<built-in>:0: error: previous declaration of ‘id’ was here
Wenn Obj-C wäre eine strenge Obermenge, würde das nicht bedeuten, dass alle gültigen C-Programme auch Obj-C-Programme sind? Beachten Sie, dass ich weder etwas bin noch verlinke.
Zugegeben, vielleicht macht LLVM (1) etwas Magisches, oder vielleicht ist das ein Fehler darin.
(1): i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Basierend auf Apple Inc. bauen 5658) (LLVM bauen 2336.1.00)
EDIT: Let Ich klärte diese Frage - die Frage ist nicht über die id
Teil, ich weiß, dass es eine besondere Bedeutung hat. Mein Punkt ist, dass es allgemein gesagt wird, dass Obj-C eine strenge Obermenge von C ist. Dies kann jedoch nicht der Fall sein, wenn es Schlüsselwörter hat, die mit gültigen C-Programmen in Konflikt stehen.
Also entweder ID ist nicht durch den Compiler reserviert, oder Obj-C ist keine strenge Obermenge. Der Zweck dieser Frage ist zu fragen, was der Fall ist, oder gibt es etwas Offensichtliches, das mir fehlt.
ID ist ein definierter Typ in Objecive-C. – dasdom
'id' ist ein reserviertes Wort in Objective-C. Haben Sie auf Prefix.pch nach Importen gesucht? – jnic
Ich habe keine Präfix-Header, nur test.m. Ich weiß, dass id in Obj-C eine besondere Bedeutung hat. – hrnt