Đôi khi tôi thấy các lập trình viên sử dụng NULL
làm giá trị trả về của main()
các chương trình C và C ++, ví dụ như một cái gì đó như thế:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Khi tôi biên dịch mã `này với gcc, tôi nhận được cảnh báo:
cảnh báo: return tạo số nguyên từ con trỏ mà không cần cast [-Wint-convert]
Điều này là hợp lý bởi vì macro NULL
sẽ được mở rộng (void*) 0
và giá trị trả về của chính sẽ là loại int
.
Khi tôi thực hiện một chương trình C ++ ngắn gồm:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
Và biên dịch nó với g ++, tôi nhận được một cảnh báo tương đương:
cảnh báo: chuyển đổi sang loại không phải con trỏ 'int' từ NULL [-Wconversion-null]
Nhưng tại sao họ sử dụng NULL
làm giá trị trả về main()
khi nó đưa ra cảnh báo? Có phải chỉ là phong cách mã hóa xấu?
- Lý do để sử dụng
NULL
thay vì0
giá trị trả lại củamain()
bất chấp cảnh báo là gì? - Được xác định theo triển khai nếu điều này phù hợp hay không và nếu vậy tại sao mọi thực hiện sẽ muốn lấy lại giá trị con trỏ?
EXIT_FAILURE
là 8 và có vẻ như sử dụng 1 không tốt cho một thất bại vì đôi khi nó được sử dụng như một thành công trong một số chương trình.
NULL
con trỏ là 0
(không có cast void *
) là hoàn toàn hợp lệ . Trong trường hợp này, lỗ hổng không được chú ý và không tạo ra cảnh báo. Nó vẫn không phải là những gì NULL nên được sử dụng cho.