将非const参数传递给需要const参数的函数时发出警告.有没有更好的办法?

tst*_*ers 5 c gcc const

我试图将参数传递给函数,并指示const接收函数应该考虑该参数.

我的理解是,下面的代码示例显示了确保test可以使用argv变量调用该函数的唯一方法,该变量未声明为const.

void test(const char * const *arr);

int main(int argc, char *argv[], char *env[])
{
    test(argv);
}

void test(const char * const *arr)
{
}
Run Code Online (Sandbox Code Playgroud)

但是,gcc给了我一个警告,如下所示:

E:\Projects\test>gcc -o test test.c
test.c: In function 'main':
test.c:5:2: warning: passing argument 1 of 'test' from incompatible pointer type
[enabled by default]
test.c:1:6: note: expected 'const char * const*' but argument is of type 'char **'
Run Code Online (Sandbox Code Playgroud)

这让我相信我在这里所做的事情是错误的.有没有更好的方法将参数传递给函数,并指出它应该被const接收函数考虑?

Jen*_*edt 11

ÇFAQ解释了为什么用C转换指针时,不存在安全防范constconst.在你的双重const限定目标指针的情况下,我认为不会出现那里描述的问题.所以C++有一个宽松的规则,允许你要求的隐式转换.不幸的是,对于C标准委员会发现C++中的规则太复杂了,所以你必须将指针转换为预期的类型.

  • 我喜欢常见问题解答中的讽刺,"一如既往,对这种演员表达的需求可能表明存在更深层次的问题".反讽是肯定的,它表明一个更深层次的问题,语言不够聪明;-) (7认同)