Tôi vừa mới đọc
Dự thảo của Ủy ban ISO / IEC 9899: 201x - ngày 12 tháng 4 năm 2011
trong đó tôi tìm thấy theo 5.1.2.2.3 Chấm dứt chương trình
..reaching the } that terminates the main function returns a value of 0.
nó có nghĩa là nếu bạn không chỉ định bất kỳ câu lệnh return nào trong main()
và nếu chương trình chạy thành công, thì tại dấu ngoặc nhọn} của main sẽ trả về 0.
Nhưng trong đoạn mã sau, tôi không chỉ định bất kỳ câu lệnh trả lại nào, nhưng nó không trả về 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);
}
biên dịch
gcc test.c
./a.out
sum is 15
echo $?
9 // here it should be 0 but it shows 9 why?
gcc
tự nó (đối với phiên bản 4.6.2) biên dịch một ngôn ngữ rất giống nhưng không hoàn toàn giống C. Nó biên dịch GnuC89 - một ngôn ngữ "lỏng lẻo" dựa trên C89.
return
câu lệnh trong sum()
là không cần thiết. int main()
nên được int main(void)
.