【发布时间】:2019-09-18 07:23:23
【问题描述】:
我正在学习 Simon Long 的 Learn to Code with C。 https://www.raspberrypi.org/magpi-issues/Essentials_C_v1.pdf 在第 20 页有这个简单的程序:
#include <stdio.h>
void main (void)
{
int a = 0;
while (a < 5)
{
printf ("a is equal to %d\n", a);
a++;
}
printf ("a is equal to %d and I've finished\n", a);
}
但是当我编译这个时,我得到了这个编译器错误:
while-loop.c:3:1: warning: return type of 'main' is not 'int'
[-Wmain-return-type]
void main(void)
^
while-loop.c:3:1: note: change return type to 'int'
void main(void)
^~~~
int
1 warning generated.
这是为什么?似乎作者的编译器没有为此给出错误。为什么会出现差异?
当我改变时
void main (void)
到
int main (void)
它编译得很好。
【问题讨论】:
-
void main是编译器可能实现也可能不实现的扩展。标准的main返回类型是int。 -
我不相信从一本包含
main()的错误签名之类的书中学习。 -
或许作者 Simon Long 是从著名的 C 专家 Herbert Schildt 那里学来的? ;-)
-
@Shawn 我不会相信每页有这么多彩色装饰的书。
标签: c