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