原文 如下无法编译:
// test.c
static int *do_something(int * const p){
int * const data = p;
*data = 2; // 错误:无法修改`'*data'常'`表达式
return 0;
}//从sqlite中化简.
不知道该怎么办,因为const
在ImportC
中是传递性
的.
保持现状或忽略常
都错误
,但这允许更多正确
的程序成功编译
.
刚刚产生的想法:D假装C头常
是可变
的.实践中,始终要复制,因为可假定
代码已在现有的C编译器
上编译了,而实现
并不受影响.这要归功于亚当
的创意.
所以,在该示例中,'int*常 p'
就变成了'int*p'
,其他同样.
可在AST
中注解常
,以便确保头常
.
是的,头常
之下都可保持传递性
,这会拒绝一些有效的C代码
,但会避免无效
的D代码
,这是公平的妥协
.
直觉,一般都是可行的,剩下情况,则显式强制转换
.