我正在尝试将参数传递给函数,并指示接收函数应该将该参数视为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)
{
}
但是,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 **'
这让我相信我在这里做的事情有点不对劲。
有没有更好的方法将参数传递给函数,并指出接收函数应该将其视为const
?
答案 0 :(得分:11)
C FAQ解释了为什么在C中将指针转换为非const
到const
时会有安全保护。在你的双const
限定目标指针的情况下,我认为不会出现那里描述的问题。所以C ++有一个宽松的规则,允许你要求的隐式转换。不幸的是,C标准委员会发现C ++中的规则太复杂了,所以你必须将指针转换为预期的类型。
答案 1 :(得分:1)
您可以将其投射如下:
void test(const char * const *arr);
int main(int argc, char *argv[], char *env[])
{
test((const char * const *)argv);
}
void test(const char * const *arr)
{
}
这将使警告消失。这是可以的,只要您可以在您的函数中将argv
视为const char * const *
。