เมื่อเร็ว ๆ นี้ฉันต้องพิมพ์โปรแกรมทดสอบ C ขนาดเล็กและในกระบวนการนี้ฉันได้สะกดคำผิดในฟังก์ชันหลักโดยบังเอิญใช้vooid
แทนvoid
.
แต่มันก็ยังใช้งานได้
การลดลงเป็นเวอร์ชันสมบูรณ์ที่เล็กที่สุดฉันลงเอยด้วย:
int main (vooid) {
return 42;
}
นี้ไม่แน่นอนรวบรวม ( gcc -Wall -o myprog myprog.c
) และเมื่อทำงานก็จะส่งกลับ 42
รหัสนี้ถูกต้องแค่ไหน?
นี่คือการถอดเสียงและวางจากbash
เชลล์ของฉันเพื่อแสดงสิ่งที่ฉันกำลังทำ:
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
int
พารามิเตอร์คุณเรียกพฤติกรรมที่ไม่ได้กำหนด อะไรก็เกิดขึ้นได้ :)