บางครั้งฉันเห็นโคเดอร์ที่ใช้NULL
เป็นค่าส่งคืนของmain()
ในโปรแกรม C และ C ++ ตัวอย่างเช่น:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
เมื่อฉันรวบรวมรหัส `นี้กับ gcc ฉันได้รับคำเตือน:
คำเตือน: return ทำให้จำนวนเต็มจากตัวชี้โดยไม่ต้องส่ง [-Wint-conversion]
ซึ่งมีความสมเหตุสมผลเนื่องจากแมโคร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 *
) ในกรณีนี้ข้อบกพร่องจะไม่ถูกสังเกตและไม่สร้างคำเตือน มันยังไม่ใช่สิ่งที่ควรใช้เป็นค่าว่าง