2010-05-23 35 views
12

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ách thức và lý do?

Nếu Không, tại sao?

+4

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

+0

Dupe http://stackoverflow.com/questions/204476/what-should-main-return-in-cc –

+0

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

Trả lời

6

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.

See here.

+0

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

+1

@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? –

+0

@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

0

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 
$ 
+0

Có gì $? sau đây? –

+0

@Precision: ghi chú –

+0

@Snake Plissken: Rất thú vị. Tôi tự hỏi tại sao đây là. –

0

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.

3

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

0

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.

1

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 :) .

Các vấn đề liên quan