以下代码段(正确)在C中给出了警告,并在C ++中给出了错误(分别使用经版本3.4.5和4.2.1测试的gcc和g ++; MSVC似乎无关紧要):
char **a;
const char** b = a;
我可以理解并接受。
C ++解决此问题的方法是将b更改为const char * const *,这不允许重新分配指针并阻止您规避const正确性(C ++ FAQ)。
char **a;
const char* const* b = a;
但是,在纯C语言中,更正后的版本(使用const char * const *)仍然发出警告,我不明白为什么。有没有一种方法可以解决这个问题而无需使用演员表?
要澄清:
1)为什么这会在C语言中生成警告?它应该完全是const安全的,C ++编译器似乎也是如此。
2)在说(并让编译器强制执行)我不会修改其指向的字符时接受此char **作为参数的正确方法是什么?例如,如果我想编写一个函数:
void f(const char* const* in) {
// Only reads the data from in, does not write to it
}
我想在char **上调用它,参数的正确类型是什么?
千巷猫影
蓝山帝景
白猪掌柜的
相关分类