때로는 C 및 C ++ 프로그램에서 NULL
반환 값으로 사용 되는 코더가 표시 main()
됩니다 (예 :
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
이 코드를 gcc로 컴파일하면 다음과 같은 경고 메시지가 나타납니다.
경고 : return은 캐스트없이 포인터에서 정수를 만듭니다 [-Wint-conversion]
이는 매크로 NULL
가 확장되고 (void*) 0
main의 반환 값이 유형 이기 때문에 합리적 int
입니다.
짧은 C ++ 프로그램을 만들 때 :
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
그리고 g ++로 컴파일하면 동등한 경고가 나타납니다.
경고 : NULL이 아닌 포인터가 아닌 유형 'int'로 변환 [-Wconversion-null]
그러나 왜 경고를 던질 때의 NULL
반환 값으로 사용 main()
합니까? 코딩 스타일이 좋지 않습니까?
- 경고에도 불구하고 반환 값
NULL
대신에 사용해야하는 이유는 무엇입니까 ?0
main()
- 이것이 적절한 지 아닌지 구현 정의되어 있습니까? 그렇다면 어떤 구현이 포인터 값을 다시 얻고 싶습니까?
EXIT_FAILURE
8이며 1을 사용하면 일부 프로그램에서 성공으로 사용되기 때문에 실패에 좋지 않은 것 같습니다.
NULL
포인터를 0
(로 캐스팅하지 않고) 정의하는 것이 유효합니다 void *
. 이 경우, 결함은 눈에 띄지 않게되고 경고를 생성하지 않습니다. 여전히 NULL을 사용해야하는 것은 아닙니다.