How to not invoke warning: type specifier missing?

我们两清 提交于 2019-12-04 03:54:37

问题


I am reading "The C programming Language" by Brian W. Kernighan and Dennis M. Ritchie. In chapter 1.2 "Variables and Arithmetic Expressions" they demonstrate a simple Fahrenheit to Celsius converter program. When I compile the program (Terminal.app, macOS Sierra), I get this warning:

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

This is the C program:

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 }

If I understand this SO answer correctly, this error is the result of non-compliance with the C99 standard. (?)

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.

How would I write this program with the proper syntax and header information to not invoke this warning message?

For what it is worth, the executable file outputs the expected results:

$  ./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 was useful:

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

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


回答1:


Just give main a return type:

int main()

and make sure to add return 0; as the last statement.




回答2:


You can either tell the compiler to use the C language standard C90 (ANSI), which was modern when the book was written. Do it by using parameter -std=c90 or -ansi to the compiler, like this:

cc -ansi FtoC.c -o FtoC.o

or you can rewrite the program to adhere to a newer standard (C99), which is what your compiler uses by default, by adding a return type to the main function, like this:

int main()



回答3:


You should give return type for the main function. By default it takes int as its return type.

Either try,

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



回答4:


Use int main() the function should return a value i.e. 0

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


来源:https://stackoverflow.com/questions/43819099/how-to-not-invoke-warning-type-specifier-missing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!