我正在阅读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 overview和list of C programming books,或C language standards。
答案 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;
}