คำอธิบาย
- int main() - ฟังก์ชันคืนค่า int ไม่ระบุพารามิเตอร์ (ใน C แปลว่ารับพารามิเตอร์ได้ทุกจำนวน)
- int main(void) - ฟังก์ชันคืนค่า int ระบุชัดเจนว่า ไม่รับพารามิเตอร์
Syntax
int main() { ... return 0; }
int main(void) { ... return 0; }
ความแตกต่างสำคัญ
ใน C ถ้าประกาศฟังก์ชันโดยไม่ระบุพารามิเตอร์ (empty parentheses) จะหมายถึง "รับพารามิเตอร์ได้ทุกจำนวน" ไม่ใช่ "ไม่รับพารามิเตอร์" ดังนั้น int main(void) จึงถูกต้องและชัดเจนกว่า
ตัวอย่างที่ 1: int main() รับอาร์กิวเมนต์ได้
#include <stdio.h>
int main() {
static int a = 10;
if (a--) {
printf("a = %d\n", a);
main(10); // เรียก main ด้วยอาร์กิวเมนต์ - คอมไพล์ได้!
}
return 0;
}
คอมไพล์และรันได้ปกติ (Recursive call with argument)
ตัวอย่างที่ 2: int main(void) ไม่รับอาร์กิวเมนต์
#include <stdio.h>
int main(void) {
static int a = 10;
if (a--) {
printf("a = %d\n", a);
main(10); // Error: too many arguments to function 'main'
}
return 0;
}
คอมไพล์ Error เพราะ main(void) ห้ามมีอาร์กิวเมนต์
แนวทางปฏิบัติที่ดี (Best Practice)
ใช้ int main(void) เมื่อไม่มีพารามิเตอร์ เพื่อความชัดเจนและป้องกันข้อผิดพลาด