如何不调用警告:缺少类型说明符?

How to not invoke warning: type specifier missing?

我正在阅读 Brian W. Kernighan 和 Dennis M. Ritchie 的“The C programming Language”。在第 1.2 章 "Variables and Arithmetic Expressions" 中,他们演示了一个简单的华氏度到摄氏度转换器程序。当我编译程序 (Terminal.app, macOS Sierra) 时,我收到此警告:

$  cc FtoC.c -o FtoC.o
FtoC.c:5:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.

这是 C 程序:

FtoC.c:
  1 #include <stdio.h>
  2 
  3 /* print Fahrenheit-Celsius table
  4     for fahr = 0, 20, ..., 300 */
  5 main()
  6 {
  7   int fahr, celsius;
  8   int lower, upper, step;
  9 
 10   lower = 0;      /* lower limit of temperature scale */
 11   upper = 300;    /* upper limit */
 12   step = 20;      /* step sze */
 13 
 14   fahr = lower;
 15   while (fahr <= upper) {
 16       celsius = 5 * (fahr-32) / 9;
 17       printf("%d\t%d\n", fahr, celsius);
 18       fahr = fahr + step;
 19   }
 20 }

如果我对的理解是正确的,这个错误是non-compliance与C99标准的结果。 (?)

The problem is not the compiler but the fact that your code does not follow the syntax. C99 requires that all variables and functions be declared ahead of time. Function and class definitions should be placed in a .h header file and then included in the .c source file in which they are referenced.

我如何使用正确的语法和 header 信息编写此程序才能不调用此警告消息?

对于它的价值,可执行文件输出预期的结果:

$  ./FtoC.o 
0   -17
20  -6
40  4
60  15
80  26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148

This 很有用:

return_type function_name( parameter list ) {
   body of the function
}

还有this overview of K&R C vs C standards, and a list of C programming books, or, for the C language standards

只需给main一个return类型:

int main()

并确保添加 return 0; 作为最后一个语句。

您应该为主要功能提供 return 类型。默认情况下,它采用 int 作为其 return 类型。

要么试试,

int main() {
  //.....
return some_int_value;
}

您可以告诉编译器使用 C 语言标准 C90 (ANSI),这在本书编写时是现代的。通过向编译器使用参数 -std=c90-ansi 来执行此操作,如下所示:

cc -ansi FtoC.c -o FtoC.o

或者您可以重写程序以遵守更新的标准 (C99),这是您的编译器默认使用的标准,方法是向 main 函数添加 return 类型,如下所示:

int main()

使用 int main() 函数应该 return 一个值,即 0

int main()
{
 //.....
return 0;
}