程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了指向 const 的 C 指针 - 如何消除警告大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决指向 const 的 C 指针 - 如何消除警告?

开发过程中遇到指向 const 的 C 指针 - 如何消除警告的问题如何解决?下面主要结合日常开发的经验,给出你关于指向 const 的 C 指针 - 如何消除警告的解决方法建议,希望对你解决指向 const 的 C 指针 - 如何消除警告有所启发或帮助;

我有一个这样的数组:@H_674_3@

const uint8_t Translations[] =
{
    0xA6,0xA0,1,0xA1,0x87,2,0xBE,3,};
@H_301_4@

我想用指针访问它:@H_674_3@

uint8_t * p_translations = Translations;    
@H_301_4@

我收到警告:@H_674_3@

警告:从 'const uint8_t *const' 赋值给 'uint8_t *' 会丢弃限定符。@H_674_3@

我很好,因为我只读取*p_translations 而从不写入。@H_674_3@

有没有办法在不抑制警告的情况下使编译器(microchip XC8)安静下来?@H_674_3@

解决方法

正如警告所述,通常没有充分的理由丢弃 const 限定符。一些可能的原因是在传递给期望原始非限定指针的 API 时。如果 API 不需要更改指针指向的数据,则声明中应包含 const。@H_674_3@

此外,编译器警告通常是为了帮助开发人员,而且大多是应该注意的警告。@H_674_3@

对于您的情况也是如此,如果您从不打算修改 p_translations 指向的内容,那么 uint8_t const* 没有理由不应该是 p_translations。另一方面,如果您不得不修改Translations,那么您应该从const中完全删除Translations。使用 const 表示在整个程序生命周期中应保持不变的实体。有一个可以修改的非const数组完全没问题,否则采用const。 Here 是了解为什么 const 除了指示数据的 const 性之外还有帮助的众多链接之一,即编译器优化的可能机会和避免编写意外修改的代码数据。@H_674_3@ ,

你也应该让你的指针 const,带有指针的 const 意味着它们指向的内存区域是只读的。这告诉编译器它可以做或不做一些事情。在您的情况下(不将 const 与指针一起使用),编译器理解为访问只读内存部分的常规指针,并发出警告,警告的原因是您实际上可以使用指针更改 const 变量,但是你应该不惜一切代价避免它因为它是 UB 并且你的程序可能会做它不应该做的事情。但是,当您将指针声明为 const 时,它会告诉编译器将其视为 const 并且不允许对该内存区域进行任何写入。请记住,您在创建指针时使用的声明仅告诉编译器您指向的数据类型。所以这并不意味着你的指针是不可更改的。如果你想让你的指针 const,你可以像这样声明它 type* const ptr。我希望我提供了足够的帮助。@H_674_3@ ,

您收到警告,因为您将 const 数组的地址存储到未限定 const 的指针中。@H_674_3@

使用 const uint8_t *p_translations = Translations; 解决问题。@H_674_3@

注意const uint8_t *p_translations等价于uint8_t const *p_translations,但与uint8_t * const p_translations不同,p_translations是不能改变的指针,指向可以通过指针改变的数据。> @H_674_3@

const uint8_t *p_translations 定义为 p_translations 是一种告诉编译器您不打算使用此指针修改 Translations 指向的数据的方法。由于 const 本身被定义为 const 数据,因此只能通过 if not all([name,surname,email,address,city,country,zipcode,phone]): return httpResponse("Fields are empty") else: # your code 限定指针对其进行操作,以检测试图修改它的代码。@H_674_3@

大佬总结

以上是大佬教程为你收集整理的指向 const 的 C 指针 - 如何消除警告全部内容,希望文章能够帮你解决指向 const 的 C 指针 - 如何消除警告所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。