Sử dụng gcc
5.2.0, tôi nhận thấy rằng mã này không tạo ra một cảnh báo:Không cảnh báo khi trở về NULL với gcc
#include <stddef.h>
int function(void)
{
return NULL;
}
void procedure(void)
{
return NULL;
}
tôi đã sử dụng lá cờ -Wall -Wextra -std=c99 -pedantic
và tôi chạy archlinux. Tôi không chắc chắn tại sao mã này hoạt động tốt trên gcc
, đặc biệt là từ clang
3.7.0 không tạo ra cảnh báo.
Tôi cũng đã thử với các phiên bản cũ hơn gcc
như 4.9 hoặc 4.7 và cả hai đều tạo cảnh báo.
Những cảnh báo là:
warning: return makes integer from pointer without a cast
và
warning: ‘return’ with a value, in function returning void
tôi nên đề cập đến mà tôi cố gắng biên soạn gcc 5.2 trên Debian và kết quả là như nhau. Vì vậy, archlinux dường như không phải là vấn đề.
Lý do cơ bản là gì? Tôi dường như không thể tìm thấy bất cứ điều gì liên quan đến điều này bất cứ nơi nào khác.
Cảm ơn bạn!
có thể trùng lặp http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value-without-pr –
Ý bạn là "đảo ngược trùng lặp"? Câu hỏi này hỏi tại sao bạn có thể trả về một giá trị trong phần thân của hàm void. Các "trùng lặp" hỏi tại sao bạn có thể viết một cơ thể của một chức năng không void mà không có một tuyên bố trở lại. – BitTickler
có thể trùng lặp của [Tại sao không trả về 0x80000000 từ một hàm trả về int32 \ _t gây ra cảnh báo?] (Http://stackoverflow.com/questions/32656460/why-doesnt-returning-0x80000000-from-a-function -that-returns-int32-t-gây-a-wa) –