簡體   English   中英

Kernighan 和 Ritchie 書中的符號常數示例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM