मैंने हाल ही में नेटबीन्स सी/सी ++ समर्थन के साथ चीजें कैसे हैं, यह जांचने के लिए मैंने अपने लैपटॉप पर एक मिनीजीडब्ल्यू + एमएसवाईएस वातावरण स्थापित किया है। सब कुछ ठीक काम करता प्रतीत होता है, हालांकि, मेरे परीक्षण के दौरान मैंने जीसीसी और माइक्रोसॉफ्ट के cl.exe कंपाइलर के बीच एक अंतर देखा है।जीसीसी - एक चेतावनी जारी नहीं की जानी चाहिए?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void) {
int i_max = INT_MAX;
char c_max = CHAR_MAX, c;
c = i_max;
printf("i_max: %d, c_max: %d, c: %d\n", i_max, c_max, c);
return EXIT_SUCCESS;
}
उत्पादन होता है:
i_max: 2147483647, c_max: 127, c: -1
आप उपरोक्त कोड में देख सकते हैं, मैं एक चार के लिए एक पूर्णांक आवंटित
यहां एक नमूना कार्यक्रम है। क्या यह एक चेतावनी उत्पन्न नहीं करेगा कि संभावित डेटा हानि हो सकती है? माइक्रोसॉफ्ट के कंपाइलर (जिसे मैंने बहुत सख्त होने के लिए कॉन्फ़िगर किया है) चेतावनी जारी करता है जबकि जीसीसी नहीं करता है।
-g -Werror -ansi -pedantic -Wall -Wextra
मैं संकलन समय चेकों भी सख्त बनाने के लिए कुछ जीसीसी विकल्प याद आ रही हूँ:
यहाँ जीसीसी विकल्प का उपयोग कर रहे हैं?
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html यह लिंक आपको दिखाता है कि दीवार और वेक्स्ट्रा में _is_ क्या शामिल है। क्यों wconversion यह एक पूर्ण रहस्य/बग नहीं है। – Pod
मेरी राय यह है कि वे चेतावनियां कुछ पकड़ने की तुलना में पीछे की ओर दर्द होती हैं, और जीसीसी नीति निर्णयों की मेरी भावना यह है कि वे ऐसा सोचते हैं। यह एक अच्छा विचार होगा कि एक -W विकल्प जिसका अर्थ है "सबकुछ जांचें, इससे कोई फर्क नहीं पड़ता कि कितना परेशान है"। –
मेरे लिए काम नहीं करता है। foo.c में उपरोक्त कोड के साथ "gcc -g -Werror -ansi -pedantic -Wall -Wextra -Wconversion foo.c" का उपयोग करके जीसीसी 4.1.2 – Glen