Tôi muốn thêm vào các câu trả lời đã được đưa ra bằng cách trích dẫn các tiêu chuẩn ngôn ngữ thực tế.
Là 'int main;' một chương trình C hợp lệ?
Câu trả lời ngắn gọn (ý kiến của tôi): chỉ khi triển khai của bạn sử dụng "môi trường thực thi đích tự do".
Tất cả các trích dẫn sau từ C11
5. Môi trường
Một triển khai dịch các tệp nguồn C và thực thi các chương trình C trong hai môi trường hệ thống xử lý dữ liệu, môi trường này sẽ được gọi là môi trường dịch và môi trường thực thi […]
5.1.2 Môi trường thực thi
Hai môi trường thực thi được xác định: tự do và được lưu trữ. Trong cả hai trường hợp, khởi động chương trình xảy ra khi một hàm C được chỉ định được gọi bởi môi trường thực thi.
5.1.2.1 Môi trường hạ cánh
Trong môi trường tự do (trong đó việc thực thi chương trình C có thể diễn ra mà không có bất kỳ lợi ích nào của hệ điều hành), tên và kiểu của hàm được gọi khi khởi động chương trình được xác định bằng cách triển khai.
5.1.2.2 Môi trường được lưu trữ
Môi trường lưu trữ không cần được cung cấp, nhưng phải phù hợp với các thông số kỹ thuật sau nếu có.
5.1.2.2.1 Khởi động chương trình
Hàm được gọi khi khởi động chương trình có tên là main . [...] Nó sẽ được định nghĩa với kiểu trả về là int và không có tham số [...] hoặc với hai tham số [...] hoặc tương đương hoặc theo một số cách thực thi khác được xác định.
Từ những điều này, những điều sau đây được quan sát thấy:
- Chương trình C11 có thể có môi trường thực thi tự do hoặc được lưu trữ và hợp lệ.
- Nếu nó có một đích tự do, thì không cần phải tồn tại một hàm chính.
- Nếu không, phải có một giá trị trả về kiểu int .
Trong môi trường thực thi tự do, tôi sẽ tranh luận rằng đó là một chương trình hợp lệ không cho phép khởi động xảy ra, bởi vì không có chức năng nào cho điều đó theo yêu cầu trong 5.1.2. Trong môi trường thực thi được lưu trữ, mặc dù mã của bạn giới thiệu một đối tượng có tên là main , nó không thể cung cấp giá trị trả về, vì vậy tôi sẽ tranh luận rằng nó không phải là một chương trình hợp lệ theo nghĩa này, mặc dù người ta cũng có thể tranh luận như vậy trước đó nếu chương trình không nghĩa là được thực thi (ví dụ trên có thể chỉ muốn cung cấp dữ liệu), sau đó nó không cho phép thực hiện điều đó.
Là 'int main;' một chương trình C ++ hợp lệ?
Câu trả lời ngắn gọn (ý kiến của tôi): chỉ khi triển khai của bạn sử dụng "môi trường thực thi đích tự do".
Trích dẫn từ C ++ 14
3.6.1 Chức năng chính
Một chương trình phải chứa một hàm toàn cục được gọi là main, là hàm khởi động được chỉ định của chương trình. Việc triển khai được xác định liệu một chương trình trong môi trường đích tự do có được yêu cầu để xác định một chức năng chính hay không. [...] Nó sẽ có kiểu trả về là kiểu int, nhưng nếu không thì kiểu của nó là kiểu thực thi. [...] Tên chính không được bảo lưu.
Ở đây, trái ngược với tiêu chuẩn C11, ít hạn chế hơn áp dụng cho môi trường thực thi đích tự do, vì không có chức năng khởi động nào được đề cập, trong khi đối với môi trường thực thi được lưu trữ, trường hợp này khá giống với C11.
Một lần nữa, tôi sẽ tranh luận rằng đối với trường hợp được lưu trữ, mã của bạn không phải là chương trình C ++ 14 hợp lệ, nhưng tôi chắc chắn rằng nó dành cho trường hợp đích.
Vì câu trả lời của tôi chỉ xem xét môi trường thực thi , nên tôi nghĩ câu trả lời của dasblinkenlicht sẽ có tác dụng, vì việc nhầm lẫn tên xảy ra trong môi trường dịch thuật đã xảy ra trước đó. Ở đây, tôi không chắc rằng các trích dẫn ở trên được tuân thủ nghiêm ngặt như vậy.
gcc -std=c99 -pedantic ...