나는 다음과 같은 코드가 있습니다 :GCC는 STR에 NULL이 될 수 없습니다 불평
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
나는 GCC 버전을 사용하고 그것을 컴파일하려고 :
[email protected] ~/p/book> gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516
을
경고를 이해하지 못합니다. const char *는 NULL이 될 수 있어야합니다. 맞습니까?
귀하의 문제와 관련이 없지만 귀하의 기능에 심각한 결함이 있습니다. ''123abc456 ''을 입력하고 결과가 어떻게되는지 봅니다. –
아마도'gcc'는 그 함수를 인라인하려고 시도하고 NULL 인자가 전달되지 않았 음을 알고 있습니다. 이 함수가 코드에서 사용 된 횟수와 사용 예제는 무엇입니까? – myaut
거짓 긍정처럼 보입니다. 'if (str)'이'if (str! = NULL)'과 비교하여 엉성한 스타일이긴하지만 실제로는 경고를 던질 필요가 없습니다. – Lundin