建议我在 GCC 中使用以下选项,因为它有助于避免许多常见错误。它会打开一堆警告-Werror
将它们变成错误。
gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror
给出以下测试代码:
#include <stdio.h>
int main(void)
{
int arr[8]={0,10,20,30,40,50,60,70};
int x;
printf("sizeof(arr): %d\n", sizeof(arr));
printf("sizeof(int): %d\n", sizeof(int));
for(x = 0; x < sizeof(arr)/sizeof(int); x++)
{
printf("%d\n",arr[x]);
}
return 0;
}
我明白了:
test.c:11: error: comparison between signed and unsigned
我知道解决这个问题的一种方法是关闭警告,但他们并没有让我最终使用这些设置来关闭它们。
另一种方法是强制转换,但有人告诉我强制转换已被弃用。
另外,我可以将 x 变成unsigned int
:
unsigned x;
但当我必须使用这些编译器选项将有符号值与无符号值进行比较时,它并不能解决一般问题。有没有更干净的方法来代替铸造?