2017-07-01 19 views
9

Danh sách chuẩn C++ cho phép các hình thức main. Nó không liệt kê int main(void) dưới dạng biểu mẫu được cho phép. Tuy nhiên, nó thường nói rằngInt chính (void) có hợp lệ trong C++ không?

Danh sách tham số (void) là tương đương với danh sách tham số rỗng

int main(void) một hình thức cho phép?

+0

[Có lẽ đúng không?] (Https://stackoverflow.com/ a/44859345/2752075) – HolyBlackCat

+9

Trong C++ sử dụng một danh sách đối số trống giống như sử dụng 'void'. Cả hai đều bằng nhau và hoán đổi cho nhau. Đây là một trong những sự khác biệt * lớn * với C, trong đó một hàm được khai báo không có bất kỳ đối số nào (ví dụ: bộ rỗng của dấu ngoặc đơn '()') có thể lấy bất kỳ số đối số không xác định nào. –

+0

@HolyBlackCat gần như là dupe? đây chỉ là một tập con của câu hỏi đó –

Trả lời

10

Từ N3936 tiêu chuẩn dự thảo:

3,6 Start và chấm dứt

3.6.1 Chức năng chính

2 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ề khai báo là của kiểu int, nhưng nếu không thì kiểu của nó sẽ được định nghĩa thực hiện. An thực hiện sẽ cho phép cả hai

- một hàm của() trả về int

- một chức năng của (int, con trỏ đến con trỏ đến char) trở int

như loại chính (8.3.5).

Sau đó:

8.3.5 Chức năng

4 ... Một danh sách tham số bao gồm một tham số vô danh duy nhất của không phụ thuộc vào kiểu void là tương đương với một tham số có sản phẩm nào danh sách. ...

Do đó,

int main(void) 

là một hình thức cho phép của main chức năng.

0

Bên cạnh nhận xét của @Some anh chàng lập trình viên và @ câu trả lời của Edgar, đây là một phần của N3936 dự thảo mà giải thích cho sự khác biệt giữa C++ và tiêu chuẩn C:

C.1.7 khoản 8: declarators [diff.decl]

8.3.5

thay đổi: Trong C++, một chức năng tuyên bố với một danh sách tham số rỗng mất không có đối số. Trong C, một danh sách tham số trống có nghĩa là số và loại đối số hàm không xác định.

Ví dụ:

int f(); // nghĩa int f (void) trong C++
                    // int f (không rõ) trong C

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