On Sat, Feb 6, 2010 at 4:29 PM, rakesh kumar <kumar3...@gmail.com> wrote: > Hi all, > Today while studying a book i just saw the following lines of code: > int main(void) > { > int printf(const char *n,...); The local declaration(prototype of the function) > int a=1; > printf("abcdef"); Calls the C library printf() function.at the time of linking. > return 0; > }c > > and the output was: abcdef > When i tried to run this code, it ran well without any error and this was > asked in GATE exam also. I am confused, how it ran without <stdio.h>, when i > used printf() function and gave the same output as printf gives. Okay after > that i commented the third line "int printf(const char *n,....);", the > output didn't get affected. Now i am thinking when we can use printf() > function without any prototype or defining any header, then why do we need > to use #include<> in our program, because when i changed this program a bit > by substituting printf() with scanf() it worked fine like scanf() does > normally. > Can anyone explain me,what is this? The C compiler is a bit lenient in syntactic analysis part for functions. It assumes a default declaration. And while linking links your printf() call to the library fucntion.But it should give warning(saying some implicit declaration). just try compiling with -Wall option set, you will get the warning. Also compile the code using g++, it will give error, saying prototype not found. > Thanks > _______________________________________________ > Ilugd mailing list > Ilugd@lists.linux-delhi.org > http://frodo.hserus.net/mailman/listinfo/ilugd >
_______________________________________________ Ilugd mailing list Ilugd@lists.linux-delhi.org http://frodo.hserus.net/mailman/listinfo/ilugd