【问题标题】:How to write a macro similar to CGRectZero for a custom struct如何为自定义结构编写类似于 CGRectZero 的宏
【发布时间】:2014-02-12 04:08:12
【问题描述】:

我有一个自定义结构,我想要一个类似于 CGRectZero 的定义。

这样我可以有一个空结构,我可以测试无效值。

【问题讨论】:

  • CGRectZero 不是 void 结构。这是一个 0 值的 CGRect。
  • 对不起,我可能没有详细解释。我的意思是我需要一个具有一些我可以识别为无效的值的结构。
  • 顺便说一句,CGRectZero 不是宏,而是外部变量(至少在 iOS 7 SDK 中)。
  • 马丁不知道。感谢您的提示。

标签: ios struct macros c-preprocessor


【解决方案1】:

它是 c 和目标 c 代码的混合器。在这种情况下,您必须使用 .mm 扩展名命名文件。

#define MyStructZero MyStructMake(0,0)

MyStruct MyStructsMake(int,int);

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

c 函数

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

在 obj c 中测试

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

    }

【讨论】:

  • 我现在注意到我认为 MyStructMake 是不正确的。它总是会创建一个 (0,0) 结构忽略传递的参数,不是吗?
【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 2019-04-07
    • 2010-12-08
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2014-06-06
    相关资源
    最近更新 更多