c - 类型 "volatile char *"的参数与类型 "const char *"的参数不兼容

标签 c constants volatile

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

void foo(const char * data);

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

volatile char var[100];

每当我尝试这样做时:

foo(var);

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

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

为什么会这样?据我了解,我的函数中的变量不允许更改指针或其内容。我知道因为我的全局变量是 volatile 的,它可能随时发生变化,但鉴于拥有 volatile 常量变量是完全合法的,我不明白为什么我会收到此编译器错误。

谢谢

--阿姆

最佳答案

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

void foo(const volatile char * data);

关于c - 类型 "volatile char *"的参数与类型 "const char *"的参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457677/

相关文章:

java - getter 方法是 Java 中 volatile 的替代方法吗?

c++ - 是否使用 volatile 引用保证读取操作不会被重新排序?

c# - volatile 关键字用法与锁

c - MACROS - 如何实现除法然后舍入

C程序在if语句中覆盖文件内容

c - 在 C 中时(使用 log Not)

c - 在 I/O 端口上读写

rust - 不是复制或克隆的全局const在Rust中如何工作?

haskell - f1 = 翻转常量映射。这个功能如何运作?

c++ - gcc下如何调用C编译器