bir typedef:Amaç-° C; işaretçi olmadan kimlik yerine typedef objc_object;
typedef struct objc_object {
Class isa;
} *id;
bir değişken, sözgelimi beyan (ve initialize) olabilir Yani şöyle:
// using id
id po_one = @"one";
İyi bir şekilde derler.
Ben kendi düzeni benim türlerini isim ve beri böyle (nesne için O ile) kendi typedef eklemek istediğiniz typedef id içinde zımni işaretçi sevmediğim tarihi: bir değişken Yani
typedef struct objc_object O;
bildirimi şöyle olabilir:
// using O
O * po_two = @"two";
Bu bir uyarı ile derlenir:
Uyumsuz işaretçi türünden başlatma
Ben yazım hatalarını anladığım kadarıyla ikincisi,
// using struct objc_object
struct objc_object * po_three = @"three";
değerine eşit olmalıdır. Uyarılar olmadan derlemek
po_two = po_one;
po_two = po_three;
hem:
O şaşırtıcı.
Denedim Yani: (Ben önlemek istiyorum tam olarak bir şey olmak - yani sadece deney nedenlerle) işaretçisi eklerseniz o uyarı olmadan çalışıp çalışmadığını kontrol etmek
typedef struct objc_object * PO;
görmek ister dışında bir typedef yapı tanımı, yapı tanımındaki bir yazım kuralına farklı şekilde çalışır (bu durumda id'nin tanımı).
Bu da iyi çalışıyor. Ben kullanırsanız
:
#define O struct objc_object
kullanarak yapı Ç tekrar uyarı olmadan derler.
Ancak mümkün olduğunda tanımlamalar yerine typedefs kullanmayı tercih ederim.
Şaşkınım. Typedefs ile yanlış anlaşılma nedir?
Hangi derleyici? – JeremyP
Ayrıca, "O *" yerine "NSObject *" işlevini kullanabilirsiniz. NSObject * po_two = @ "two"; ', çoğu durumda. –