[英]Symbolic constant example in Kernighan and Ritchie book
我復制了 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 第二版的附錄 A.1“本手冊描述了 C 草案指定的語言,該草案於 1988 年 10 月 31 日提交給 ANSI,批准為‘美國信息系統標准 - 編程語言 C,X3.159-1989 .'”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.