Я иногда вижу кодеров, которые используют в NULLкачестве возвращаемого значения в программах main()на C и C ++, например что-то вроде этого:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Когда я компилирую этот код с помощью gcc, я получаю предупреждение:
предупреждение: возвращение делает целое число из указателя без приведения [-Wint-преобразование]
что разумно, потому что макрос NULLдолжен быть расширен до, (void*) 0а возвращаемое значение main должно иметь тип int.
Когда я делаю короткую программу на C ++:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
И скомпилировать его с g ++, я получаю эквивалентное предупреждение:
предупреждение: преобразование в тип без указателя 'int' из NULL [-Wconversion-null]
Но почему они используют в NULLкачестве возвращаемого значения, main()когда оно выдает предупреждение? Это просто плохой стиль кодирования?
- Какова причина для использования
NULLвместо0возвращаемого значенияmain()несмотря на предупреждение? - Определено ли это реализацией, если это уместно или нет, и если да, то почему любая реализация захочет вернуть значение указателя?
EXIT_FAILUREэто 8, и, похоже, использование 1 не годится для сбоя, поскольку иногда оно используется в некоторых программах как успех.
NULLуказатель как 0(без приведения к void *). В этом случае недостаток остается незамеченным и не выдает предупреждение. Это все еще не то, для чего следует использовать NULL.