我有一个函数,其原型(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/