Trong C
Trong C, nếu chữ ký hàm không có tham số, nó vẫn có thể nhận nhiều đối số đầu vào. Nhưng trong C++ thì không - biên dịch sẽ lỗi nếu truyền đối số cho hàm không tham số. Do đó int main() và int main(void) giống nhau trong C, nhưng int main(void) là cách tốt hơn, ngăn chặn việc truyền đối số vào main.
Ví dụ (C) - Cho phép gọi main với tham số
#include <stdio.h>
int main() {
static int counter = 3;
if (--counter) {
printf("%d ", counter);
main(5); // Hợp lệ trong C
}
}
Kết quả (C)
2 1
Ví dụ (C++) - Lỗi khi truyền tham số
#include <iostream>
using namespace std;
int main() {
static int counter = 3;
if (--counter) {
cout << counter;
main(5); // LỖI BIÊN DỊCH
}
}
Kết quả (C++)
main.cpp: In function 'int main()':
main.cpp:10:13: error: too many arguments to function 'int main()'
main(5);
^
main.cpp:5:5: note: declared here
int main()
^~~~