मैं निम्नलिखित कोड है:जीसीसी str पर शून्य हो करने में सक्षम नहीं शिकायत
int atoi(const char * str)
{
int ret = 0, i;
if (str) {
for (i = 0; str[i] != '\0'; i++)
if (str[i] >= '0' && str[i] <= '9')
ret = ret * 10 + str[i] - '0';
}
return ret;
}
जब
[email protected] ~/p/book> make
gcc -c -o db.o db.c -Wall -Werror -std=c99 -g -DVERSION=\"v0.4\" -Wno-
unused-variable -Wno-unused-function
gcc -c -o misc.o misc.c -Wall -Werror -std=c99 -g -DVERSION=\"v0.4\" -
Wno-unused-variable -Wno-unused-function
misc.c: In function ‘atoi’:
misc.c:55:5: error: nonnull argument ‘str’ compared to NULL [-Werror=nonnull-compare]
if (str) {
^
cc1: all warnings being treated as errors
Makefile:54: recipe for target 'misc.o' failed
make: *** [misc.o] Error 1
मैं जीसीसी संस्करण का उपयोग कर रहा हूँ के साथ संकलित करने के लिए कोशिश कर रहा है:
[email protected] ~/p/book> gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516
मुझे चेतावनी नहीं समझती है। एक कॉन्स char * पूर्ण होना चाहिए, है ना?
आपकी समस्या से संबंधित नहीं है, लेकिन आपके फ़ंक्शन में गंभीर त्रुटि है ... उदाहरण का उपयोग करने का प्रयास करें इनपुट के रूप में '123abc456" 'और देखें कि परिणाम क्या होगा। –
शायद 'gcc' उस फ़ंक्शन को इनलाइन करने का प्रयास करता है और जानता है कि इसमें कोई भी पूर्ण तर्क नहीं है। आपके कोड में इस फ़ंक्शन का कितनी बार उपयोग किया जाता है और इसके उपयोग के उदाहरण क्या हैं? – myaut
झूठी सकारात्मक की तरह लगता है। यद्यपि 'if (str)' 'if (str! = NULL) 'की तुलना में मैला शैली है, इसके लिए वास्तव में चेतावनी को टॉस करने की आवश्यकता नहीं है। – Lundin