Chức năng main()
trong chương trình C có trả về kiểu dữ liệu double
không?Hàm main() có thể trả về gấp đôi không?
Nếu Có, cách thức và lý do?
Nếu Không, tại sao?
Chức năng main()
trong chương trình C có trả về kiểu dữ liệu double
không?Hàm main() có thể trả về gấp đôi không?
Nếu Có, cách thức và lý do?
Nếu Không, tại sao?
Có. Theo tiêu chuẩn C, chính() nên trả lại giá trị int
. Nhưng không phải phải.
Có lẽ đó là một điều bình thường. Sẽ rất khó hiểu nếu một ứng dụng có thể trả về một char [], int [], v.v. – Warty
@ItzWarty: Bạn * không thể * trả về một char [] hoặc int [] hoặc bất kỳ thứ gì khác ngoài kiểu dữ liệu nguyên thủy. Trong bộ nhớ của nó sẽ được lưu trữ? Đó là những con trỏ, và chúng trỏ * ở đâu đó *. Nếu chương trình đã bị hủy, mảng này sẽ được lưu ở đâu? –
@Comp, nó sẽ là hoàn toàn khả thi cho một hệ điều hành cho phép bạn sao chép một char [] trở về từ chính đến quá trình cha mẹ. Điều này không khác gì khi chuyển mã trả về int về cho cha mẹ (các yêu cầu lưu trữ khác nhau nhưng chính xác cùng một phương thức). – paxdiablo
Tôi không biết điều đó có nghĩa là gì nếu main
trả về gấp đôi. Dù sao đây là những gì xảy ra với gcc:
double main()
{
return 0.0;
}
$ cc double.c double.c: In function 'main': double.c:2: warning: return type of 'main' is not 'int' $ ./a.out $ echo $? 255 $
Có gì $? sau đây? –
@Precision: ghi chú –
@Snake Plissken: Rất thú vị. Tôi tự hỏi tại sao đây là. –
Các hàm có tên chính mà đóng vai trò như điểm mấu chốt của một chương trình trong một tổ chức thực hiện của C phải trả lại một int. Có thể viết một hàm có tên 'chính' trả về gấp đôi. Để làm như vậy, bạn làm cho nó tĩnh, và sau đó bạn mua cho mình một vest chống đạn và có thể thuê một số vệ sĩ vũ trang; nếu ai đó phải duy trì một quái vật như vậy, bạn sẽ cần chúng.
Từ C99
5.1.2.2.3 chấm dứt chương trình Nếu kiểu trả về của hàm chính là một loại tương thích với int, một trở từ cuộc gọi ban đầu đối với chính hàm tương đương việc gọi hàm thoát với giá trị trả về bởi các chức năng chính như là đối số của nó ; 10) đạt} mà chấm dứt chức năng chính trả về một giá trị của 0. Nếu kiểu trả về không phải là wi tương thích int thứ, tình trạng chấm dứt trở lại môi trường máy chủ là không xác định
tham khảo ở đây - 5.1.2.2.3 chấm dứt chương trình http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
Nếu bạn đang ở trong một môi trường lưu trữ (ví dụ, thường là trên một PC) kiểu giá trị trả lại được cố định như đã nói. Bạn có thể trả về một loại giá trị khác nếu chạy trong môi trường tự do. Một môi trường tự do thường là trường hợp khi lập trình cho vi điều khiển, vì không có hệ điều hành nào xung quanh (bạn tạo một nhị phân lớn chạy trực tiếp trên phần cứng). Tuy nhiên, trong trường hợp này, nguyên mẫu thông thường cho chính sẽ là void main(void)
.
Nhưng điểm nào trong việc trả về một loại khác như double
? Trừ khi người gọi (tức là hệ điều hành) có thể làm điều gì đó với giá trị trả về thì nó là vô nghĩa, và vì không có cách nào để người gọi biết về kiểu giá trị trả về nó phải được sửa.
C nói rằng nó hoàn toàn ổn. POSIX, mặt khác, muốn một số nguyên từ 0 đến 255.Nói chung, main()
phải trả lại giá trị EXIT_SUCCESS
hoặc EXIT_FAILURE
trừ khi đặt cụ thể trạng thái không phải là nhưng vẫn nằm trong khoảng từ 0 - 255 để làm cho trạng thái có ý nghĩa.
Ví dụ, quay lại 114 có thể cho biết tập lệnh init đang gọi về một số điều kiện có thể được sửa bởi tập lệnh.
Nếu, trong hệ điều hành POSIX bạn cố trả lại 3.14
từ main()
, quá trình gọi sẽ hầu như luôn thấy 255
.
Tôi không chắc chắn về các hệ điều hành khác, nhưng nói chung - những gì C sẽ cho phép bạn tránh xa không phải lúc nào cũng dễ chịu với những gì hệ điều hành sẽ cho phép bạn thoát khỏi :) .
Tôi phải hỏi, tại sao lời nhắc lại? Đây là một câu hỏi hoàn toàn hợp pháp. +1. – Warty
Dupe http://stackoverflow.com/questions/204476/what-should-main-return-in-cc –
cũng xem - https://softwareengineering.stackexchange.com/questions/203104/why-cant-main-return -a-double-or-string-chứ không phải là-int-hoặc-void – roottraveller