【发布时间】:2017-10-31 23:22:02
【问题描述】:
代码:
static const char *a = NULL;
abc((char **)&a);
abc 方法定义为:
abc(char** a)
我收到错误(警告视为错误):
error: cast discards '__attribute__((const))' qualifier from pointer target type [-Werror=cast-qual]
为了解决这个问题,我补充说:
#ifdef _PTR_CAST_
#define SIZE_T_CAST uintptr_t
#else
#define SIZE_T_CAST size_t
#endif
我的问题是,api调用是否应该是
abc( (char **)(SIZE_T_CAST)&a); or
abc( (char **)(SIZE_T_CAST *)&a);
两者都没有抱怨,但正确的方法是什么?
【问题讨论】:
-
首先,您可以尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们吗?然后还告诉我们在哪里你得到了错误?例如代码中的注释?
-
我有所有可能解决这个问题的代码,这使得它非常完整和不言自明。
-
好吧,那么...那么现在您必须告诉我们您是使用 C 还是 C++ 编程?这两种语言非常不同,即使它们有时看起来相同。我的猜测是您正在使用 C++ 编程,在这种情况下,您只需要一个
const_cast。 -
抱歉,我正在使用 C。我得到了 C++ 的建议,我添加了它。现已删除。
-
那我真的不明白你会怎么得到那个警告?
&a是一个const char **,您将其转换为char **在 C 中一切正常。您确实在abc调用行上得到错误?不是别的地方吗?
标签: c gcc casting type-conversion