2014-01-22 56 views
2

我有一個自定義結構,我想定義一個類似於CGRectZero的定義。如何爲自定義結構編寫類似於CGRectZero的宏

這樣我可以有一個無效的結構,我可以測試無效的值。

+0

CGRectZero

MyStruct MyStructMake(int a, int b) { MyStruct s; s.a = a; s.b = b; return s; } 

測試不是空隙結構。這是一個有0值的CGRect。 – Abizern

+0

對不起,也許我沒有詳細解釋。我的意思是我需要一個具有某些我可以識別爲無效的值的結構。 – Axy

+1

順便說一下,'CGRectZero'不是一個宏,而是一個外部變量(至少在iOS 7 SDK中)。 –

回答

3

它是c和客觀c代碼的混合器。在這種情況下,您必須以.mm擴展名命名文件。

#define MyStructZero MyStructMake(0,0) 

MyStruct MyStructsMake(int,int); 

typedef struct MyStruct { 
    int a; 
    int b; 
} MyStruct; 

c函數在物鏡Ç

- (void) testStruct 
    { 
     MyStruct m = MyStructZero; 
     NSLog(@"%i", m.a); 

    } 
+0

我注意到MyStructMake不正確,我認爲。它總是會創建一個忽略傳遞參數的(0,0)結構體,不是嗎? – Axy

+0

是的,謝謝。我已糾正它。 – karim

+0

好的,我接受了你的答案,因爲這是最清楚的。謝謝 – Axy

2

由於CGRectZero相當於CGRectMake(0, 0, 0, 0)那麼您應該使用類似的方法。寫一個函數,初始化你的結構並生成一個宏:

MyStructMake(int i, float f, char c, double d); 
#define MyStructZero MyStructMake(0, 0.0, '0', 0.0)