0
点赞
收藏
分享

微信扫一扫

d假装d头常是可变的


​​原文​​ 如下无法编译:

// 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代码​​​,这是公平的​​妥协​​​.
直觉,一般都是可行的,剩下情况,则​​​显式强制转换​​.


举报

相关推荐

0 条评论