मुझे सलाह दी गई है कि जीसीसी के साथ निम्नलिखित विकल्पों का उपयोग करें, क्योंकि इससे कई सामान्य त्रुटियों से बचने में मदद मिलती है। यह चेतावनियों का एक गुच्छा चालू करता है और -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
मुझे पता है कि एक तरह से मैं इसे ठीक कर सकते चेतावनी बंद हो रहा है, लेकिन वे हेवन ' टी ने मुझे इन सेटिंग्स का उपयोग अंत में बंद करने के लिए किया है।
सामान कास्ट करने का एक और तरीका है, लेकिन मुझे बताया गया है कि कास्टिंग को हटा दिया गया है।
इसके अलावा, मैं एक unsigned int
में एक्स बना सकता है:
unsigned x;
लेकिन यह सामान्य समस्या का समाधान नहीं होता जब मैं इन संकलक विकल्पों का उपयोग कर अहस्ताक्षरित मूल्यों के साथ हस्ताक्षर किए मूल्यों की तुलना करने के लिए है। कास्टिंग के बजाए एक क्लीनर तरीका है?
ध्यान दें कि 'sizeof' एक 'size_t' देता है जिसे ['% zu'] (http://stackoverflow.com/q/940087/995714) –