我知道,在C你不能隐式转换,例如,char**
到const char**
(C.F. C-Faq,SO question 1,SO Question 2)。惯用下常量双指针
在另一方面,如果我看到声明的函数,像这样:
void foo(char** ppData);
我必须承担的功能可能会改变传入的数据 因此,如果我写一个函数,将不更改数据,这是更好的,在我看来,要声明:
void foo(const char** ppData);
甚至:
void foo(const char * const * ppData);
但是,这使该功能的用户处于一个尴尬的位置。 他们可能有:
int main(int argc, char** argv)
{
foo(argv); // Oh no, compiler error (or warning)
...
}
而且为了干净地叫我的功能,他们需要插入一个演员。
我来自大多数C++背景,由于C++的更深入的常量规则,这不是一个问题。
C中的习惯解决方案是什么?
申报富为取一个
char**
,只是记录事实,即它不会改变它的投入?这似乎有点严重,尤其是。因为惩罚谁可能有一个const char**
他们想通过它用户(现在他们已经投远常量性)强制用户投了投入,增加常量性。
还有其他的东西吗?
我猜2)没问题。 – Andrey 2011-03-04 17:06:09
我觉得2)是合适的。 – 2011-03-04 17:10:43
1)'const'是一个无用的C语言编译器注释。 – 2011-03-04 17:13:15