2014-01-22 60 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)