How to not invoke warning: type specifier missing?

MmmHmm picture MmmHmm · May 6, 2017 · Viewed 12.7k times · Source

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.

Answer

Mureinik picture Mureinik · May 6, 2017

Just give main a return type:

int main()

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