- 主题:请问C能否做到编译时按const检查变量,但运行时可按照普通变量
就是类似 const uint8_t tag[16]; 的变量
打算在初始化赋值的时候用类型转换赋值 memcpy((uint8_t *)tag, "0123456789012345", sizeof(tag));
但运行时直接 Segmentation fault 了,valgrind 报告如下错误:
==1014== Process terminating with default action of signal 11 (SIGSEGV)
==1014== Bad permissions for mapped region at address 0x406A70
应该是加了const后,变量tag被放入了只读字段了。
请教有没有既能利用 const 的编译时检查功能,又不让它放入只读字段的方法呢?谢谢。
--
FROM 51.222.204.*
你这需求不合逻辑
你用他的检查,你还要赋值
这检查完全没用上
【 在 lexluthor 的大作中提到: 】
: 就是类似 const uint8_t tag[16]; 的变量
: 打算在初始化赋值的时候用类型转换赋值 memcpy((uint8_t *)tag, "0123456789012345", sizeof(tag));
: 但运行时直接 Segmentation fault 了,valgrind 报告如下错误:
: ...................
--
FROM 223.104.161.*
不想让别的地方修改,只在一个地方修改。
【 在 slowaction 的大作中提到: 】
: 你这需求不合逻辑
: 你用他的检查,你还要赋值
: 这检查完全没用上
--
FROM 51.222.204.*
定义的时候不加const
传出去的时候决定加不加const
【 在 lexluthor 的大作中提到: 】
: 不想让别的地方修改,只在一个地方修改。
--
FROM 223.104.161.*
在定义的时候赋初始值,而不是在定义之外的地方赋值。也就是编译期赋值。
如果要运行期赋值,那必须不能加const,以阻止其放入read only的内存段里
--
修改:z16166 FROM 123.119.160.*
FROM 123.119.160.*
多谢
最后用的办法是定义一个普通变量
然后再定义一个把类型转换成const的宏在别处使用。
【 在 slowaction 的大作中提到: 】
: 定义的时候不加const
: 传出去的时候决定加不加const
--
FROM 51.222.204.*
只许州官放火啊
【 在 lexluthor 的大作中提到: 】
: 不想让别的地方修改,只在一个地方修改。
--
FROM 108.181.15.*
感觉这是准备挖个深坑
【 在 lexluthor 的大作中提到: 】
: 就是类似 const uint8_t tag[16]; 的变量
: 打算在初始化赋值的时候用类型转换赋值 memcpy((uint8_t *)tag, "0123456789012345", sizeof(tag));
: 但运行时直接 Segmentation fault 了,valgrind 报告如下错误:
: ...................
--
FROM 124.64.18.*
对 对 对, 为了工作更有意义(不可替代), 必须随时在代码用一些高深的技术.
【 在 gfkid 的大作中提到: 】
: 感觉这是准备挖个深坑
--
FROM 51.222.204.*
就是介个意思
【 在 Madlee 的大作中提到: 】
: 只许州官放火啊
--
FROM 51.222.204.*