【发布时间】:2008-09-26 17:31:27
【问题描述】:
您能否定义一个访问普通变量但以只读方式访问的宏(而不是将其定义为对函数的调用)?比如下面代码中的VALUE宏,是否可以这样定义dostuff()函数导致编译错误?
struct myobj {
int value;
}
/* This macro does not satisfy the read-only requirement */
#define VALUE(o) (o)->value
/* This macro uses a function, unfortunately */
int getvalue(struct myobj *o) { return o->value; }
#define VALUE(o) getvalue(o)
void dostuff(struct myobj *foo) {
printf("The value of foo is %d.\n", VALUE(foo)); /* OK */
VALUE(foo) = 1; /* We want a compile error here */
foo->value = 1; /* This is ok. */
}
【问题讨论】:
-
是否有 const 不适合您的原因?
-
该值不是恒定的,但只能在有限的地方进行修改。这种宏将允许通过宏进行访问的策略,并有助于最大限度地减少意外修改。它还有助于找出仍然会更改值的遗留代码,这不再是可取的。
标签: c c-preprocessor