2014-05-20 6 views
5

In this document unter dem Abschnitt "Variable Qualifiers" etikettiert, Apple sagt:Was ist "das Problem" bei der Platzierung von variablen Qualifiern?

Sie Variablen richtig dekorieren sollte. Wenn Qualifier in einer Objektvariablen Meldung ab, das richtige Format ist:

ClassName * qualifier variableName; 

zum Beispiel:

MyClass * __weak myWeakReference; 
MyClass * __unsafe_unretained myUnsafeReference; 

Weitere Varianten technisch nicht korrekt sind, aber „verziehen“ durch der Compiler. Informationen zum Verständnis des Problems finden Sie unter http://cdecl.org/.

Ein Blick auf cdecl.org klärt nichts. Kann jemand erklären, auf welches "Problem" es sich bezieht? Mit anderen Worten, hilf mir, andere davon zu überzeugen, dass dies tatsächlich auf eine Weise von Bedeutung ist, die nicht nur "weil diese eine Readme das sagt" ist.

Antwort

6

Meine Beispiele mit Kauderwelsch Übersetzungen

Es ist bekannt, dass

ClassName * const varName; //varName is a constant pointer to ClassName 

andere Bedeutung als

const ClassName * varName; //varName is a pointer to constant ClassName 

oder

ClassName const * varName; //varName is a pointer to constant ClassName 

In der hat gleiche Art und Weise diese Erklärung

ClassName * __weak varName; //varName is a weak pointer to ClassName 

und diese Erklärung

__weak ClassName * varName; //varName is a pointer to weak?? ClassName?? 

sind sehr unterschiedlich. Die Bedeutung des zweiten ist jedoch klar (obwohl es technisch falsch ist) und kann vom Compiler "vergeben" werden.

Die Korrektheit ist ein bisschen wichtiger, sobald Sie anfangen, mit Zeigern auf Zeigern zu arbeiten (z. B. Foo * __autoreleasing *).

Ich nehme an, sie wollten Anfänger Entwickler vor dem C/C++ Deklarations-Kauderwelsch schützen. Der Qualifier am Anfang erscheint natürlicher.

+0

Meine Faustregel lautet, diese von rechts nach links zu lesen. So würde zum Beispiel 'ClassName * __weak VariablenName' gelesen werden als" _VariablenName_ ist ein schwacher Zeiger auf _ClassName_ "Oder für' char const * Zeichenfolge' erhalten Sie "Zeichenfolge ist ein Zeiger auf Const Zeichen" – nielsbot

+0

cf http: // eli. thegreenplace.net/2008/07/18/reading-c-type-declarations/ – nielsbot

+1

Ich weiß, wie man sie liest :) Right-to-left funktioniert nur für die einfachsten :) – Sulthan

Verwandte Themen