结构成员的宏

时间:2017-02-09 22:40:23

标签: c

我有一个结构定义,我不允许更改。但是,我想在对它进行操作后访问成员(操作符出现在第一个操作数之后)。在我看来,我可以使用宏来访问修改后的值,就像它是结构本身的一部分一样。

struct test{
    int a;
    int b;
} *t;

#define c b+1
...
printf("%d", t -> c);

这对我来说确实看起来更好,但感觉更换时会出现问题。有没有更好的方法来做这样的事情?这是不好的做法吗?什么可能出错?

2 个答案:

答案 0 :(得分:1)

  

可能出现什么问题?

printf("%d", t->c * 3);

首先。

答案 1 :(得分:1)

你的建议很糟糕。

  1. 单个字母成员和宏(但我们忽略它)
  2. 难以阅读和支持。 (t->c是我添加的成员或其中一个疯狂的marcros?c +1还是-1?
  3. 如果你真的因某种原因需要宏观化,那就更清楚了。

    e.g。

    #define BPlusOne(t) ((t)->b + 1)
    printf("%d", BPlusOne(t));
    

    如果这对于学校来说只是一件简单的工作,那就太过分了,但是我正在开发一个大型系统,在这个系统中生成结构,就像所有这些类型的宏一样,在这种情况下它可以工作(但是我仍然没有这样做过; - )