Kernighan和Ritchie书中的符号常量示例
我复制了Kernighan和Ritchie 1988年第15页《C编程语言》一书中关于符号常数的脚本示例,如下所示:Kernighan和Ritchie书中的符号常量示例,c,compiler-errors,symbolic-math,kernighan-and-ritchie,C,Compiler Errors,Symbolic Math,Kernighan And Ritchie,我复制了Kernighan和Ritchie 1988年第15页《C编程语言》一书中关于符号常数的脚本示例,如下所示: #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() {
#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));
}
我做错了什么
我做错了什么
你正在读一本完全过时和不正确的书
- 在本书编写的前标准C中,你可以写任何东西,因为没有标准。例如
没有返回类型或跳过main()
返回0代码>在末尾
- 在1989年的第一个C标准中,该书从未正确更新到1),您可以编写
而不使用返回类型,但必须编写main()
返回0代码>结束时,否则当调用方(操作系统)使用返回值时,程序调用未定义的行为
- 在1999年更新的C标准中,从语言中删除了“implicit int”
,您必须编写main()
。但是,在此版本的语言中,您可以跳过main()中的intmain(void)
,这是以前无法做到的返回0
1) 根据K&R第二版附录A.1,“本手册描述了1988年10月31日提交给ANSI的草案中规定的C语言,以供批准为‘美国信息系统标准-编程语言C,X3.159-1989’。” 我做错了什么 你正在读一本完全过时和不正确的书
- 在本书编写的前标准C中,你可以写任何东西,因为没有标准。例如
没有返回类型或跳过main()
返回0代码>在末尾
- 在1989年的第一个C标准中,该书从未正确更新到1),您可以编写
而不使用返回类型,但必须编写main()
返回0代码>结束时,否则当调用方(操作系统)使用返回值时,程序调用未定义的行为
- 在1999年更新的C标准中,从语言中删除了“implicit int”
,您必须编写main()
。但是,在此版本的语言中,您可以跳过main()中的intmain(void)
,这是以前无法做到的返回0
1) K&R第二版附录A.1中的“本手册描述了1988年10月31日提交给ANSI供批准的草案中规定的C语言,作为“美国信息系统标准-编程语言C,X3.159-1989”。您确定复制的代码正确吗?您将
UPPER
宏拼写为UPER
。警告很明显。您对LOWER
有两种不同的定义,我希望第二种定义实际上是STEP
。此外,在C99及以上版本中,函数定义应该明确提到它们的返回类型。不要依赖于隐式的int
。好吧……你的编辑现在完全改变了这个问题——而且它不再起作用了,因为实际上没有任何问题。@Chase。对不起,我打错了。我改正了,还是得到了警告。什么是隐式int
?你说的是上部
、下部
和步骤
。因为这正是我无法理解的:有三个变量是在没有定义类型的情况下定义的,我想知道这是怎么可能的,这可能是最新的一本书。也可以以pdf格式免费提供,或者您可以从该链接购买印刷书籍。这本书对初学者并不友好,但K&R也不友好。你确定你复制的代码正确吗?您将UPPER
宏拼写为UPER
。警告很明显。您对LOWER
有两种不同的定义,我希望第二种定义实际上是STEP
。此外,在C99及以上版本中,函数定义应该明确提到它们的返回类型。不要依赖于隐式的int
。好吧……你的编辑现在完全改变了这个问题——而且它不再起作用了,因为实际上没有任何问题。@Chase。对不起,我打错了。我改正了,还是得到了警告。什么是隐式int
?你说的是上部
、下部
和步骤
。因为这正是我无法理解的:有三个变量是在没有定义类型的情况下定义的,我想知道这是怎么可能的,这可能是最新的一本书。也可以以pdf格式免费提供,或者您可以从该链接购买印刷书籍。这本书对初学者并不友好,但K&R也不友好。@EricPostpischil第二版声称已更新为C90。但是main(){}
不带返回0代码>在C90中始终是未定义的行为。那么,它到底是如何不正确的呢?@EricPostphil K&R第一版于1978年为标准前C版出版。1988年的第二版在附录A.1中声明了这一点“本手册描述了1988年10月31日提交给ANSI的草案中规定的C语言,该草案作为`美国信息系统标准-编程语言C,X3.159-1989'批准。'本手册是对拟议标准的解释,而不是标准本身,尽管已经注意使其成为语言的可靠指南。“X3.159草案和C89之间的返回类型行为没有变化。我非常确定草案和ANSI C89之间的总体变化不多。此外,我对K&R拥抱者回应事实感到非常厌倦
fahr_symbolic.c:9:1: warning: type specifier missing, defaults to 'int'
[-Wimplicit-int]
main()
^
1 warning generated.