c/c++语言开发共享“volatile char *”类型的参数与“const char *”类型的参数不兼容

我有一个函数,其原型如下:

void foo(const char * data); 

在我的代码的其他地方,我有一个声明如下的全局变量

 volatile char var[100]; 

每当我尝试这样做:

 foo(var); 

编译器抛出以下错误消息:

“volatile char *”类型的参数与“const char *”类型的参数不兼容

为什么会这样? 据我了解,我的函数中的变量不允许更改指针或其内容。 我理解,因为我的全局变量是易变的,它可能随时发生变化,但看到拥有一个易变的const变量是完全合法的,我不明白为什么我得到这个编译器错误。

谢谢

–Amr

    这是因为隐式转换可以向指针类型的目标添加限定符,但不能删除它们。 因此,如果您希望函数能够接受volatile和/或const限定指针,则必须使用以下两者来声明它:

     void foo(const volatile char * data); 

    因为使用指向非易失性的指针访问volatile变量是错误的。 对象是易失性的,然后它应该在任何地方被访问,或者你可以将它作为非易失性访问,然后它不应该被标记为这样。 下定决心。

    如果要在函数中处理volatile参数,则必须将其声明为:

     void foo(const volatile char * data); 

    这样就可以了。 但请注意,这也为您带来了foo实现的所有开销,即data[something]将在您访问它的任何点从内存重新加载。

    (通常volatile不是一个好主意,除非您正在使用设备驱动程序。即使对于线程进行并行处理,它通常也不能保证您在第一个站点的预期。)

      以上就是c/c++开发分享“volatile char *”类型的参数与“const char *”类型的参数不兼容相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541901.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐