Các main
chức năng phải được khai báo là một hàm không thành viên trong không gian tên toàn cầu. Điều này có nghĩa là nó không thể là hàm thành viên tĩnh hoặc không tĩnh của một lớp, cũng không thể đặt nó trong một không gian tên (ngay cả không gian tên không tên).
Tên main
không được dành riêng trong C ++ ngoại trừ như một chức năng trong không gian tên toàn cầu. Bạn có thể tự do khai báo các thực thể khác có tên main
, bao gồm trong số những thứ khác, các lớp, biến, liệt kê, hàm thành viên và các hàm không phải thành viên không có trong không gian tên toàn cục.
Bạn có thể khai báo một hàm có tên main
là một hàm thành viên hoặc trong một không gian tên, nhưng một hàm như vậy sẽ không phải là main
hàm chỉ định nơi chương trình bắt đầu.
Các main
chức năng không thể được khai báo là static
hay inline
. Nó cũng không thể bị quá tải; chỉ có thể có một hàm được đặt tên main
trong không gian tên toàn cục.
Các main
chức năng không thể được sử dụng trong chương trình của bạn: bạn không được phép để gọi main
hàm từ bất cứ nơi nào trong mã của bạn, cũng không phải bạn được phép lấy địa chỉ của nó.
Các loại trả lại main
phải đượcint
. Không có loại trả về nào khác được cho phép (quy tắc này được in đậm vì rất thường thấy các chương trình không chính xác khai báo main
với loại trả về void
; đây có thể là quy tắc bị vi phạm thường xuyên nhất liên quan đến main
chức năng).
Có hai tuyên bố main
đó phải được cho phép:
int main() // (1)
int main(int, char*[]) // (2)
Trong (1) , không có tham số.
Trong (2) , có hai tham số và chúng được đặt tên theo quy ước argc
và argv
, tương ứng. argv
là một con trỏ tới một chuỗi các chuỗi C đại diện cho các đối số cho chương trình. argc
là số lượng đối số trong argv
mảng.
Thông thường, argv[0]
chứa tên của chương trình, nhưng điều này không phải lúc nào cũng đúng. argv[argc]
được đảm bảo là một con trỏ null.
Lưu ý rằng vì một đối số kiểu mảng (như char*[]
) thực sự chỉ là một đối số kiểu con trỏ được ngụy trang, hai cách sau đây là cả hai cách hợp lệ để viết (2) và cả hai đều có nghĩa chính xác giống nhau:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Một số triển khai có thể cho phép các loại và số lượng tham số khác; bạn phải kiểm tra tài liệu triển khai của mình để xem những gì nó hỗ trợ.
main()
dự kiến sẽ trả về 0 để biểu thị thành công và khác không để biểu thị sự thất bại. Bạn không bắt buộc phải viết một return
tuyên bố rõ ràng main()
: nếu bạn main()
trả lại mà không có một return
tuyên bố rõ ràng , nó giống như khi bạn đã viết return 0;
. Hai main()
chức năng sau có cùng hành vi:
int main() { }
int main() { return 0; }
Có hai macro, EXIT_SUCCESS
và EXIT_FAILURE
, được xác định trong <cstdlib>
đó cũng có thể được trả về main()
để biểu thị thành công và thất bại, tương ứng.
Giá trị được trả về main()
được truyền cho exit()
hàm, kết thúc chương trình.
Lưu ý rằng tất cả những điều này chỉ áp dụng khi biên dịch cho một môi trường được lưu trữ (không chính thức, một môi trường nơi bạn có một thư viện tiêu chuẩn đầy đủ và có một hệ điều hành chạy chương trình của bạn). Cũng có thể biên dịch chương trình C ++ cho môi trường tự do (ví dụ: một số loại hệ thống nhúng), trong đó trường hợp khởi động và chấm dứt được xác định hoàn toàn do triển khai và một main()
chức năng thậm chí không được yêu cầu. Tuy nhiên, nếu bạn đang viết C ++ cho một hệ điều hành máy tính để bàn hiện đại, thì bạn đang biên dịch cho một môi trường được lưu trữ.
main
trả về trong C và C ++ .