Tag: 警告

警告:格式’%d’需要类型’int *’,但参数2的类型为’int’

所以我是C的新手,我遇到了这个警告发生的问题。 警告意味着什么,我该如何解决它。 我写的代码在这里: void main(void) { char* name = “”; int age = 0; printf(“input your name\n”); scanf(“%s\n”, name); printf(“input your age\n”); scanf(“%d\n”, age); printf(“%s %d\n”, name, age); }

volatile变量作为函数的参数

有这个代码: typedef volatile int COUNT; COUNT functionOne( COUNT *number ); int functionTwo( int *number ); 我无法摆脱一些警告.. 我在functionOne原型上得到了这个警告1 函数返回类型时忽略[警告]类型限定符 我得到这个警告2,无论我用一个COUNT 指针参数而不是一个int指针调用functionTwo [警告]从指针目标类型中抛弃限定符 显然变量/指针不能“强制转换”为volatile / un-volatile ..但是每个参数都必须指定为volatile吗? 那么如果已经为非易失性变量定义了库函数怎么用呢? 编辑 :使用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; } […]

字符数组下标警告

当我使用char数组下标时,如下例所示: int main(){ char pos=0; int array[100]={}; for(pos=0;pos<100;pos++) printf("%i\n", array[pos]); return 0; } 我收到警告,我正在使用char数组下标: 警告:数组下标的类型为’char'[-Wchar-subscripts] 哪个好,因为我启用了此警告。 GCC手册说: -Wchar-subscripts如果数组下标的类型为“char”,则发出警告。 这是错误的常见原因,因为程序员经常忘记这种类型是在某些机器上签名的。 -Wall启用此警告。 因此,此警告应防止使用负数组索引。 我的问题是,为什么这个警告只在char上激活而在其他签名类型上也没有? 谢谢。

为什么编译器没有警告超出范围的静态数组索引?

最近,我的一位同事通过写出堆栈上的静态数组(他在不增加数组大小的情况下添加了一个元素)而被严重咬了一口。 编译器不应该捕获这种错误吗? 以下代码使用gcc完全编译,即使使用-Wall -Wextra选项,但它显然是错误的: int main(void) { int a[10]; a[13] = 3; // oops, overwrote the return address return 0; } 我很肯定这是不确定的行为,虽然我现在找不到C99标准的摘录。 但是在最简单的情况下,数组的大小称为编译时间并且索引在编译时是已知的,编译器是否应该至少发出警告?

“控制到达无效function的结束”是什么意思?

我在这个二进制搜索算法上遇到了奇怪的编译器错误。 我得到一个警告, control reaches end of non-void function 。 这是什么意思? int binary(int val, int sorted[], int low, int high) { int mid = (low+high)/2; if(high < low) return -1; if(val sorted[mid]) return binary(val, sorted, mid+1, high); else if(val == sorted[mid]) return mid; }

通过头文件在GCC中禁用警告消息?

我在我的C代码中使用函数gets() 。 我的代码工作正常,但我收到一条警告信息 (.text+0xe6): warning: the `gets’ function is dangerous and should not be used. 我希望不会弹出此警告消息。 有什么办法吗? 我想知道通过创建一个用于禁用某些警告的头文件可能存在这种可能性。 或者在编译期间有任何选项可以满足我的目的吗? 或者可能有一种特殊的方法使用gets()来发出此警告?