2010-09-30 25 views
5

thể trùng lặp:
does c++ standard prohibit the void main() prototype?chính không thể bị vô hiệu

Tại sao C không ++ cho tôi làm void main()? Nó không phải là một vấn đề, nhưng tôi vẫn tò mò.

+0

vấn đề với int void() {return 0;}; ? – Max

+1

Tương tự như [ tiêu chuẩn C++ có cấm nguyên mẫu void main() không? ] (http://stackoverflow.com/questions/1915659/does-c-standard-prohibit-the-void-main-prototype). –

+2

câu hỏi hay hơn là lý do tại sao bạn đang sử dụng đổ máu C++;) –

Trả lời

11

Bởi vì kiểu trả về của main() (như bắt buộc của tiêu chuẩn) phải int

C++ 03 [Section 3.6.1 chức năng chính]

An thực hiện sẽ không ấn định trước các hàm main. Chức năng này sẽ không bị quá tải. Nó sẽ có kiểu trả về kiểu int, nhưng nếu không thì kiểu của nó sẽ được xác định thực hiện.

4

Vì tiêu chuẩn cho biết nó trả về int.

1

Một số hệ điều hành mong đợi giá trị trả về tích phân từ các quy trình. Khai báo chính để trả về một int. Nếu bạn không quan tâm đến giá trị, chỉ cần trở lại 0.

Từ comp.lang.c FAQ:

+3

Bạn thậm chí không cần phải trả lại bất cứ điều gì một cách rõ ràng. – GManNickG

+0

@GMan - điểm tốt. –

9

trả lời từ Stroustrup mình:

tôi có thể viết "void main()"? Định nghĩa

void main() { /* ... */ } 

không và không bao giờ được đã được C++, cũng đã thậm chí nó được C. Xem ISO C++ chuẩn 3.6.1 [2] hoặc tiêu chuẩn 5.1.2.2.1 ISO C. Một thực hiện phù hợp chấp nhận

int main() { /* ... */ } 

int main(int argc, char* argv[]) { /* ... */ } 

Một thực hiện phù hợp có thể cung cấp nhiều phiên bản của main(), nhưng tất cả họ phải có kiểu trả về int. Hàm int được trả về bởi hàm main() là một cách để một chương trình trả về một giá trị cho "hệ thống" gọi nó. Trên các hệ thống không cung cấp một cơ sở như vậy, giá trị trả về bị bỏ qua, nhưng điều đó không làm cho "void main()" hợp pháp C++ hoặc hợp pháp C. Ngay cả khi trình biên dịch của bạn chấp nhận "void main()" tránh nó, hoặc rủi ro bị coi là dốt nát bởi các lập trình viên C và C++.

Trong C++, main() không cần chứa câu lệnh trả về rõ ràng. Trong trường hợp đó, giá trị trả về là 0, nghĩa là thực hiện thành công. Ví dụ:

#include<iostream> 

int main() 
{ 
    std::cout << "This program returns the integer value 0\n"; 
} 

Cũng lưu ý rằng cả ISO C++ lẫn C99 đều không cho phép bạn loại bỏ tuyên bố. Đó là, trái ngược với C89 và ARM C++, "int" không được giả định khi một kiểu bị thiếu trong một khai báo.Do đó:

#include<iostream> 

main() { /* ... */ } 

là một lỗi vì loại trả về thiếu chính().

Nguồn: http://www2.research.att.com/~bs/bs_faq2.html#void-main

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