首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#为教学目的定义

#为教学目的定义
EN

Stack Overflow用户
提问于 2013-10-23 17:26:29
回答 4查看 115关注 0票数 3

我想对我正在编写的一些不平凡的代码隐藏一些复杂性。在这里,我想隐藏一个水平的间接从一个结构指针,以使它更可读性。我不是在问这是干净的还是最好的实践,我知道它不是,但我也知道我喜欢实现什么:)

所以,有这样的东西是多么的圣洁

代码语言:javascript
复制
#define getmark() m->o->marked

除了这个事实,我不会用非学术性的代码写它?这样我就能做

代码语言:javascript
复制
n->getmark()

,这是更好的(更重要的一点,比)

代码语言:javascript
复制
n->m->o->marked

#define代码正确吗?它会在这里做一个没有附加任何附加条件的文本替换吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-23 17:35:18

IMHO,大多数C程序员更喜欢函数样式的宏,比如:

代码语言:javascript
复制
#define getmark(m) ((m) && (m)->o ? (m)->o->marked : -1)
票数 6
EN

Stack Overflow用户

发布于 2013-10-23 17:34:48

坦白说-不。

您不是让您的代码eaiser读取,而是隐藏了一个隐藏的状态机(m指针指向o)。

你也让这个黑客成为全球性的--如果有人有这样的变量,它可能会崩溃。

还有..。在宏后面添加"()“以使其看起来像是在调用一个普通函数,而不是两个间接函数的技巧.是不好的。它寻找一个读者,就像应该有一个函数的这个名字,但相反,你隐藏了一个怪物(扑克脸.)。

如果您需要简化状态机,并且您知道只有一种状态--创建一个全局静态变量并创建调用这些对象的普通函数。

票数 4
EN

Stack Overflow用户

发布于 2013-10-23 17:32:37

它会起作用,但即使在C语言中,这也是一个糟糕的想法。请不要这样做。

如果您想避免重复的间接方向的“源膨胀”,请使用临时指针。

代码语言:javascript
复制
O* myO;

myO = n->m->o;

o->marked = o->this + o->that;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19548404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档