Іноді я бачу кодери, які використовують NULLяк повернене значення main()в програмах C і C ++, наприклад щось подібне:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Коли я компілюю цей `код з gcc, я отримую попередження:
попередження: return робить ціле число від вказівника без виведення [-Wint-convert]
що розумно, оскільки макрос NULLповинен бути розширений до, (void*) 0а значення, що повертається основним, має тип 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.