我被建议在GCC中使用以下选项,因为它有助于避免许多常见错误.它会打开一堆警告并将-Werror其变成错误.
gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror
Run Code Online (Sandbox Code Playgroud)
鉴于以下测试代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
test.c:11: error: comparison between signed and unsigned
Run Code Online (Sandbox Code Playgroud)
我知道我能解决这个问题的一种方法就是关闭警告,但是他们还没有让我使用这些设置来最终关闭它们.
另一种方法是投射东西,但我被告知铸造已被弃用.
另外,我可以将x变为unsigned int:
unsigned x;
Run Code Online (Sandbox Code Playgroud)
但是,当我必须使用这些编译器选项将带符号值与无符号值进行比较时,它无法解决一般问题.是否有更清洁的方式而不是铸造?
c ×1