[英]typedef'ng a pointer and const
我正在看一个例子,它表明为什么typedef'ng指针是一种不好的做法。 我对该示例不了解的部分是为什么编译器无法捕获问题。 我在下面的代码中详细说明了这个例子:
#include <stdio.h>
typedef int *TYPE;
void set_type(TYPE t) {
*t = 12;
}
void foo(const TYPE mytype) {
set_type(mytype); // Error expected, but in fact compiles
}
int main() {
TYPE a;
int b = 10;
a = &b;
printf("A is %d\n",*a);
foo(a);
printf("A is %d\n",*a);
return 0;
}
所以,我能够改变的值a
。 即便如此,该示例解释说,你将不得不这样做, typedef const int *TYPE
,要解决这个问题,我不明白为什么编译器没能赶上,当我设置错误TYPE to be const
在函数参数本身。 我确信我遗漏了一些非常基本的东西。
这里的问题是关于const
应用于什么的混淆:它是应用于指针值本身,还是应用于指向的值?
const TYPE x
表示指针值应该是常量。 这大致相当于int * const x
。 请注意,以下代码确实会导致错误:
int b = 10;
const TYPE p = NULL;
p = &b; // error here (assign to const)
您期望的是const int * x
,它使x指向的值为常量。
由于typedef隐藏了TYPE
是指针类型的事实,除了声明另一个typedef之外,没有办法指定TYPE
指向的东西应该是const
:
typedef const int * CONST_TYPE;
然而,在这一点上,typedef似乎造成了比它解决的更多麻烦......可能不是最好的主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.