Mr.*_*edy 4 c kernighan-and-ritchie compiler-warnings
我正在阅读Brian W. Kernighan和Dennis M. Ritchie的" C编程语言 ".在第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.
Run Code Online (Sandbox Code Playgroud)
这是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 }
Run Code Online (Sandbox Code Playgroud)
如果我理解正确答案,则此错误是不符合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
Run Code Online (Sandbox Code Playgroud)
这很有用:
return_type function_name( parameter list ) {
body of the function
}
Run Code Online (Sandbox Code Playgroud)
只需给出main一个返回类型:
int main()
Run Code Online (Sandbox Code Playgroud)
并确保添加return 0;为最后一个语句.
您可以告诉编译器使用 C 语言标准 C90 (ANSI),该标准在本书撰写时是现代的。-std=c90通过使用参数或-ansi编译器来完成此操作,如下所示:
cc -ansi FtoC.c -o FtoC.o
Run Code Online (Sandbox Code Playgroud)
或者您可以通过向函数添加返回类型来重写程序以遵循较新的标准 (C99),这是您的编译器默认使用的标准main,如下所示:
int main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7071 次 |
| 最近记录: |