Я иногда вижу кодеров, которые используют в 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.