How to not invoke warning: type specifier missing?

control reaches end of non-void function
a out command not found

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 (, 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]
1 warning generated.

This is the C program:

  1 #include <stdio.h>
  3 /* print Fahrenheit-Celsius table
  4     for fahr = 0, 20, ..., 300 */
  5 main()
  6 {
  7   int fahr, celsius;
  8   int lower, upper, step;
 10   lower = 0;      /* lower limit of temperature scale */
 11   upper = 300;    /* upper limit */
 12   step = 20;      /* step sze */
 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.

Just give main a return type:

int main()

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

c: How to not invoke warning: type specifier missing?, 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  Compiler Warning C4430. 2 minutes to read +2; In this article. missing type specifier - int assumed. You can turn off this warning with the #pragma warning or

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()

[C] Just beginning with C, anxious about textbook : learnprogramming, I am reading "The C programming Language" by Brian W. Kernighan and Dennis M. Ritchie. I am trying to build a solution in Visual Studio and the compiler keeps throwing the error: "missing type specifier- int assumed. Note: C++ does not support default-int" in my "exercise13class.h" file on the line where the constructor is initialized.

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;

warning: type specifier missing, defaults to int [-Wimplicit , trying to run this in UNIX gives me the error "helloworld.c:3:1: warning: type specifier missing, Make sure you are in the same directory as what you are trying to run. Not sure if this is the right place to post this, but I need to share this with  Toggle Sub Navigation. Search Answers Clear Filters. Answers. Support; MathWorks

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

int main()
return 0;

Compiler Error, temp.c:6:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]. main(​void). ^~~~. 1 warning generated. This warning showed up  Disable "Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)" warning 883 Views 0 Replies Latest reply on Jul 4, 2019 2:59 AM by reptcarileb

hello_world_c: warning: type specifier missing, defaults to 'int', This warning is shown when the hello_world_c project is built: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] It seems like  Mr. Kennedy. 30. answers. 37. questions 4 How to not invoke warning: type specifier missing? May 6 '17. 4 why is an identical array not equivalent? Aug 8 '17.

Requesting or suppressing warnings with compiler options, Note This topic does not apply to the Clang-based front end of IBM® XL C/C++ for AIX®, which is invoked by xlclang/xlclang++. C:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] ^== the warning group is 'implicit-int' foo()  1. They mean you're not declaring a return type for your functions, and that you're not using return statements after your compiler added a default int return type for those functions. Declare them all void and the warnings will disappear. – Crowman Jun 27 '13 at 15:30.

Online C compiler, Run (Ctrl-Enter) table number starting from 1 : "); ^ Main.c:5:4: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] printf("Input upto  If a type-specifier is not provided in a declaration, it is taken to be int. The optional keywords signed and unsigned can precede or follow any of the integral types, except enum , and can also be used alone as type specifiers, in which case they are understood as signed int and unsigned int , respectively.

  • Use int main() instead of just main(). Main should also return an integer value, usually 0 (or EXIT_SUCCESS if you include stdlib.h).
  • Since you're passing a -std=c99 flag, I think it will actually try to compile as ansi C (I think that's c89). No c99 issue here. But keep in mind that, while it's good, Kernighan & Ritchie is also old (I don't know if there are updated versions out there for current C standards & compilers); so some things will be, well, archaic.
  • Hint: get another book.
  • Note: the .o extension is usually used for object files. Which is not what you're creating here. Just use cc FtoC.c -o FtoC, or even just cc FtoC.c and run ./a.out for simple test programs.
  • @Mr.Kennedy Yes, it is for a return value. Zero for success, non-zero for failure.
  • In C99 mode you don't even need an explicit return.
  • int main(){...return 0;} ?
  • @Mr.Kennedy yup!
  • Thanks - I do plan on reading the whole book for the fundamnetals and historical value.
  • Plain main() is not valid in C90 either. C90 does not allow declarations with empty decl-specifier sequences.
  • @AnT True, but the compilers (at least GCC) usually tolerate it in C90 mode. While it is not a good idea to write production code like this, I think it is OK to use the parameters to silence the compiler when studying example code in a book.