This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: sos help for understanding


yacson <yactiem@gmail.com> writes:

> Sorry, I'm a  new user and i want to understand why this c code work (in
> linux I'm worling on mandriva 2009 spring)?
> main()
> {printf("hello,world");}
>
> why does not the compiler complain about the missing stdio.h ? it just gives
> "warning:incompatible implicit declaration of built-in function printf" and
> actually prints the string "hello,world".

For historical reasons C permits you call functions which have not
been declared.  If you do that, the function is presumed to have been
declared as "int fn()" (which is not the same as "int fn(void)").
That is what is happening here.

This is not true in C++, by the way, only in C.

Technically the standard prohibits you from using an implicit
declaration for a varargs function like printf, but in practice it
normally works on real systems.  Also the standard prohibits you from
using an implicit declaration for a function which does not actually
return int, but that too will normally work unless the function
returns a struct.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]