c - 传递结构时丢弃限定符
问题描述
我遇到了我无法弄清楚的“丢弃限定符”案例之一。在我尝试摆脱警告之前,我的代码可以凭经验起作用。这是错误:
filter.c:28:21: warning: passing 'const filterentry [1]' to parameter of type
'struct filter_matchbuffer *' discards qualifiers
[-Wincompatible-pointer-types-discards-qualifiers]
filterServiceBuffer(filterinparsermap);
^~~~~~~~~~~~~~~~~
在下面的代码中,我有一系列文本字符串过滤器,它们是与函数配对的文本。例如,当我看到“$GPRIP”字符串时,它会复制消息。无论如何,在 filterinparsermap[] 中有整个系列的这些对。
#define FILTER_COPY 3
enum
{
FILTERFUNCTION_COPY = FILTER_COPY,
#define FILTERFUNCTION_COPY FILTERFUNCTION_COPY
};
struct filter_matchbuffer
{
int indexofstring;
int filterbehavior;
const char *const strforcomparison;
};
typedef struct filter_matchbuffer filterentry;
#define FILTERTEXTENTRY(num, behavior, x) \
{ \
num, behavior, #x \
}
const filterentry filterinparsermap[] = {
FILTERTEXTENTRY(1, FILTER_COPY, "$GPRIP")};
void filterServiceBuffer(struct filter_matchbuffer p_filtermap[])
{
}
int main(){
filterServiceBuffer(filterinparsermap);
return(0);
}
我真的很想摆脱这个错误,但我似乎无法让我的结构和指针类型同意并且仍然可以编译代码。任何建议将不胜感激。
解决方案
摆脱错误(“丢弃限定符”)
编辑函数签名以接受指向const
数据的指针。
// void filterServiceBuffer(struct filter_matchbuffer p_filtermap[])
void filterServiceBuffer(const struct filter_matchbuffer p_filtermap[])
推荐阅读
- swift - Swift,试图创建一个保持登录状态,但是实现的代码不起作用
- java - Java import org.mockito 报错包不存在
- c++ - 如何编译使用循环引用的代码?
- swift - 如何从 WatchOS 的 SwiftUI 列表中删除分隔符?
- django - 如何复制 HTTP 标头?
- angular - Ngx Shell 组件不是 ngModule 的一部分
- c - OpenCL 内核定义错误 clBuildProgram(CL_BUILD_PROGRAM_FAILURE)?
- java - 从用户输入中打印几个回文
- swift - 如何使用单独的视图控制器从弹出视图更新 UIlabel
- ajax - 我想使用 PUT 方法来更新我的数据库中的变量。每次单击按钮时,我都需要更新该变量