gpt4 book ai didi

c - 警告 : initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]

转载 作者:行者123 更新时间:2023-11-30 18:33:35 35 4
gpt4 key购买 nike

我试图理解为什么我的编译器警告我有关此代码:

static const char *const  _menuMain_Strings_1[] __ATTR_PROGMEM__ = { _menuMain_L1,
_menuMain_L2, _menuMain_L3, _menuMain_L4 }

static const MENU_DEFINITION _menuDef_Main_1 __ATTR_PROGMEM__ = {
_menuMain_Strings_1, _menuMain_Fields_1 };
../menudefs.h:53:3: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
53 | _menuMain_Strings_1, _menuMain_Fields_1 };
| ^~~~~~~~~~~~~~~~~~~

首先,我必须添加额外的 *const 才能生成十六进制文件以消除编译器错误。根据我的假设,编译器无论如何都会丢弃 const 之一。如何才能让编译器满意而不给我警告?谢谢。

最佳答案

错误消息表明 _menuMain_Strings_1 标识了一个指向 const 数据的指针(确实如此),但您正在使用它来初始化指向非 的指针常量数据。您尚未提供这些类型的所有详细信息,但这与编译器丢弃限定符无关。相反,它是关于您的代码有一个const-限定不匹配。

这种情况需要发出警告,因为如果指向的数据实际上本身被声明为 const(而不是仅在指针中限定),则尝试修改它会产生未定义的行为。当通过原始的 const 限定指针进行访问时,编译器可以发现这一点并拒绝它,但当通过非 const 限定的副本进行访问时,编译器不会拒绝它。 code>_menuDef_Main_1 已初始化。

How can I satisfy the compiler without it giving me warnings?

一致地使用const或根本不使用。请注意,它是病毒式传播的:您可以自由应用 const 限定,但无法安全地删除它。据推测,您需要修改 MENU_DEFINITION 的定义以适本地执行 const,这可能需要您进行进一步的更改。

关于c - 警告 : initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56550354/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com