【发布时间】:2011-03-19 05:37:54
【问题描述】:
拥有此代码:
typedef volatile int COUNT;
COUNT functionOne( COUNT *number );
int functionTwo( int *number );
我无法摆脱一些警告..
我在 functionOne 原型中收到此警告 1
[警告] 类型限定符被忽略 函数返回类型
我得到这个警告 2,无论我用 COUNT pointer 参数而不是 int 指针调用 functionTwo 的地方
[警告] cast 丢弃限定符 从指针目标类型
显然变量/指针不能“强制转换”为易失性/非易失性。但每个参数也必须指定为易失性?那么如果已经为非易失性变量定义了任何库函数,我该如何使用它呢?
编辑:使用gcc -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wextra -Wstrict-prototypes -Wmissing-prototypes …
编辑:根据 Jukka Suomela 的建议,这是警告二的代码示例
typedef volatile int COUNT;
static int functionTwo(int *number) {
return *number + 1;
}
int main(void) {
COUNT count= 10;
count = functionTwo(&count);
return 0;
}
【问题讨论】:
-
我希望这是一个学术问题。如果这是您要解决的真正问题,那么您选择的方法可能会让您走上一条艰难的道路。我想不出为什么要按值将 volatile 传递给函数的充分理由。
-
@Amardeep 我也找不到任何理由,但如果我不这样做,我会收到第二个警告,告诉我应该在原型中为 volatile 变量指定 volatile
标签: c pointers arguments warnings volatile