使用透明宏来抽象实现细节是否是一种良好的做法?像这样:
#define valuePointer struct value*
struct list {
valuePointer* listData;
int length;
}
在我看来,宏使代码更清晰,并抽象出应该去那里的struct value** listData
。但它是一种无用的宏;只是直接意味着value*
。这可以吗?
答案 0 :(得分:4)
C具有typedef
typedef struct value* valuePointer ;
如果你有充分的理由,只能隐藏typedef中的*
。
答案 1 :(得分:1)
不是出于这种用法,使用typedef做你刚才做的事情,例如:
typedef struct value* valuePointer.
如果你不掌握它们,定义是非常危险的,但在某些情况下可能非常有效。在我看来,你应该在处理需要相同功能的不同类型时使用它。例如,如果您希望得到数字的平方:
#define SQUARE(i) ((i)*(i))
正如你所看到的,我添加了很多括号,因为它确实很危险。
我个人只看到"抽象"当你有3层或更多指针时指针,否则取消引用两次并不是什么大问题。