【发布时间】:2012-11-13 07:26:53
【问题描述】:
在编译期间调用以下函数:
char* process_array_of_strings(const char** strings);
当 char** 作为参数传递时,GCC 会抱怨:
note: expected ‘const char **’ but argument is of type ‘char **’
虽然该函数不会更改字符(因此是 const),但它会复制指针数组以修改字符指针本身,因此这里绝对不希望使用常量指针。
编译成功,程序似乎可以运行。那么程序员应该如何处理这个警告呢?
【问题讨论】:
-
你是怎么调用那个函数的?
-
啊!现代 c 试图与历史实践保持兼容,同时受益于严格的持续正确性,从而产生美丽的金褐色碎片。
-
@dmckee 是的,它是一个漂亮的 cruft 和所有 :) 但是当函数接受非常量而不是相反时它不应该发出警告吗?
-
这是常见问题解答:parashift.com/c++-faq/constptrptr-conversion.html。它适用于 C 和 C++。