如何解决Kernighan 和 Ritchie 书中的符号常量示例
我复制了 Kernighan 和 Ritchie 1988 p.15 的 The C Programming Language 一书中关于符号常量的脚本示例如下:
#include <stdio.h>
#define LOWER 0 /* lower limit of table */
#define UPPER 300 /* upper limit */
#define STEP 20 /* step size*/
/* print Fahrenheit-Celsius table */
main()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf("%3d %6.1f\n",fahr,(5.0 / 9.0) * (fahr - 32));
}
但是,当我运行 gcc script.c
时,我得到:
fahr_symbolic.c:9:1: warning: type specifier missing,defaults to 'int'
[-Wimplicit-int]
main()
^
1 warning generated.
我做错了什么?
解决方法
我做错了什么?
您正在阅读一本完全过时且不正确的书。
-
在本书所针对的前标准 C 中,你可以写任何东西,因为没有标准。例如,没有返回类型的
main()
或在末尾跳过return 0;
。 -
在 1989 年的第一个 C 标准中,这本书从未正确更新为1),您可以编写没有返回类型的
main()
,但您会 将return 0;
写在最后,否则当调用者(操作系统)使用返回值时程序会调用未定义的行为。 -
在 1999 年更新的 C 标准中,从语言中删除了“隐式 int”
main()
,您必须编写int main (void)
。但是,在此版本的语言中,您可以跳过 main() 中的return 0
,这是您以前无法做到的。
2018 年的当前 C 语言在这方面与 1999 年的版本相同。但是 K&R 中的代码从未对任何版本的标准化 C 有效。
1) 来自 K&R 2nd edition 的附录 A.1 “本手册描述了 1988 年 10 月 31 日提交给 ANSI 的草案指定的 C 语言,以批准为‘美国信息系统标准’ - 编程语言 C,X3.159-1989.'"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。