【 以下文字转载自 CProgramming 讨论区 】
发信人: lexluthor (lexluthor), 信区: CProgramming
标 题: 请问C能否做到编译时按const检查变量,但运行时可按照普通变量使用呢
发信站: 水木社区 (Mon Mar 4 11:27:48 2024), 站内
就是类似 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 的编译时检查功能,又不让它放入只读字段的方法呢?谢谢。
===================
最后用的办法是定义一个普通变量
然后再定义一个把类型转换成const的宏在别处使用。
※ 修改:·lexluthor 于 Mar 4 18:54:05 2024 修改本文·[FROM: 51.222.204.*]
※ 来源:·水木社区
http://m.mysmth.net·[FROM: 51.222.204.*]
修改:lexluthor FROM 51.222.204.*
FROM 51.222.204.*