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

时间:2017-05-06 10:00:53

标签: c compiler-warnings kernighan-and-ritchie

我正在阅读Brian W. Kernighan和Dennis M. Ritchie的“The C programming Language”。在第1.2章“变量和算术表达式”中,他们演示了一个简单的华氏温度到摄氏温度转换器程序。当我编译程序(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 }

如果我正确理解this SO answer,则此错误是不符合C99标准的结果。 (?)

  

问题不在于编译器,而是您的代码不遵循语法的事实。 C99要求提前声明所有变量和函数。函数和类定义应放在.h头文件中,然后包含在引用它们的.c源文件中。

如何使用正确的语法和标头信息编写此程序以不调用此警告消息?

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

$  ./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
}

K&amp; R C与C标准this overviewlist of C programming books,或C language standards

4 个答案:

答案 0 :(得分:6)

只需给main一个返回类型:

int main()

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

答案 1 :(得分:4)

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

cc -ansi FtoC.c -o FtoC.o

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

int main()

答案 2 :(得分:1)

您应该为main函数指定返回类型。默认情况下,它的返回类型为int

尝试,

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

答案 3 :(得分:1)

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

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