用于抽象的预处理器宏 - 良好实践?

时间:2014-11-15 20:17:43

标签: c macros c-preprocessor

使用透明宏来抽象实现细节是否是一种良好的做法?像这样:

#define valuePointer struct value*

struct list {
  valuePointer* listData;
  int length;
}

在我看来,宏使代码更清晰,并抽象出应该去那里的struct value** listData。但它是一种无用的宏;只是直接意味着value*。这可以吗?

2 个答案:

答案 0 :(得分:4)

C具有typedef

typedef struct value* valuePointer ;

如果你有充分的理由,只能隐藏typedef中的*

答案 1 :(得分:1)

不是出于这种用法,使用typedef做你刚才做的事情,例如:

typedef struct value* valuePointer.

如果你不掌握它们,定义是非常危险的,但在某些情况下可能非常有效。在我看来,你应该在处理需要相同功能的不同类型时使用它。例如,如果您希望得到数字的平方:

#define SQUARE(i) ((i)*(i))

正如你所看到的,我添加了很多括号,因为它确实很危险。

我个人只看到"抽象"当你有3层或更多指针时指针,否则取消引用两次并不是什么大问题。