以下是否有效“GNU C”?
int foo;
const int bar __attribute__((__alias__("foo")));
换句话说,我可以为一个可变的对象提供const
限定别名吗?其动机是避免仅在程序初始化时写入的对象的虚假重载,否则编译器障碍或内存障碍会导致编译器重新加载。
GCC不会针对上述内容发出任何警告或错误,但是当实际定义不是时,C明确禁止(在行为未定义的意义上)错误地声明extern
对象const
const
,大概是因为这样做会导致有效的转换(省略重复加载)来改变程序的行为,并且使用别名似乎是一种欺骗和绕过正式UB同时允许的方式(在我的情况下) ,请求)完全相同的危险转变。
关于GCC是否支持此类使用,是否有任何官方消息?