我想对我正在编写的一些不平凡的代码隐藏一些复杂性。在这里,我想隐藏一个水平的间接从一个结构指针,以使它更可读性。我不是在问这是干净的还是最好的实践,我知道它不是,但我也知道我喜欢实现什么:)
所以,有这样的东西是多么的圣洁
#define getmark() m->o->marked除了这个事实,我不会用非学术性的代码写它?这样我就能做
n->getmark(),这是更好的(更重要的一点,比)
n->m->o->marked#define代码正确吗?它会在这里做一个没有附加任何附加条件的文本替换吗?
发布于 2013-10-23 17:35:18
IMHO,大多数C程序员更喜欢函数样式的宏,比如:
#define getmark(m) ((m) && (m)->o ? (m)->o->marked : -1)发布于 2013-10-23 17:34:48
坦白说-不。
您不是让您的代码eaiser读取,而是隐藏了一个隐藏的状态机(m指针指向o)。
你也让这个黑客成为全球性的--如果有人有这样的变量,它可能会崩溃。
还有..。在宏后面添加"()“以使其看起来像是在调用一个普通函数,而不是两个间接函数的技巧.是不好的。它寻找一个读者,就像应该有一个函数的这个名字,但相反,你隐藏了一个怪物(扑克脸.)。
如果您需要简化状态机,并且您知道只有一种状态--创建一个全局静态变量并创建调用这些对象的普通函数。
发布于 2013-10-23 17:32:37
它会起作用,但即使在C语言中,这也是一个糟糕的想法。请不要这样做。
如果您想避免重复的间接方向的“源膨胀”,请使用临时指针。
O* myO;
myO = n->m->o;
o->marked = o->this + o->that;https://stackoverflow.com/questions/19548404
复制相似问题