Đôi khi thấy hai dạng định nghĩa hàm main: int main() và int main(void). Có khác biệt không?
Trong C++, không có khác biệt. Trong C, cả hai đều đúng. Nhưng dạng thứ hai tốt hơn về mặt kỹ thuật. Nó chỉ rõ hàm không nhận bất kỳ đối số nào. Trong C, nếu hàm không chỉ định đối số, nó có thể được gọi không đối số hoặc với bất kỳ số lượng đối số nào. Xem hai mã sau (nhớ đây là C, không phải C++).
Ví dụ 1: int main()
#include <stdio.h>
void my_function() {
//some task
}
int main(void) {
my_function(10, "Hello", "World"); // gọi với 3 đối số
return 0;
}
Kết quả
Chương trình biên dịch thành công
Ví dụ 2: int main(void)
#include <stdio.h>
void my_function(void) {
//some task
}
int main(void) {
my_function(10, "Hello", "World"); // gọi với 3 đối số
return 0;
}
Kết quả
[Error] too many arguments to function 'my_function'
Trong C++, cả hai chương trình đều lỗi. Vậy int main() trong C có thể gọi với bất kỳ số đối số nào, nhưng int main(void) không cho phép đối số nào.