ฉันเพิ่งอ่าน
ร่างคณะกรรมการ ISO / IEC 9899: 201x - 12 เมษายน 2554
ซึ่งฉันพบภายใต้ 5.1.2.2.3 การยุติโปรแกรม
..reaching the } that terminates the main function returns a value of 0.
หมายความว่าหากคุณไม่ได้ระบุคำสั่งส่งคืนใด ๆ ในmain()
และหากโปรแกรมทำงานได้สำเร็จที่วงเล็บปีกกาปิด} ของ main จะส่งกลับ 0
แต่ในรหัสต่อไปนี้ฉันไม่ได้ระบุคำสั่งส่งคืนใด ๆ แต่ก็ไม่ส่งคืน 0
#include<stdio.h>
int sum(int a,int b)
{
return (a + b);
}
int main()
{
int a=10;
int b=5;
int ans;
ans=sum(a,b);
printf("sum is %d",ans);
}
รวบรวม
gcc test.c
./a.out
sum is 15
echo $?
9 // here it should be 0 but it shows 9 why?
gcc
โดยตัวมันเอง (สำหรับเวอร์ชัน 4.6.2) รวบรวมภาษาที่คล้ายกันมาก แต่ไม่เหมือน C มันรวบรวม GnuC89 ซึ่งเป็นภาษาที่ "หลวม ๆ " ตาม C89
return
คำสั่งใน ควรจะเป็น sum()
int main()
int main(void)