luka
luka

Reputation: 101

how I call a function in my source file including only header file in c?

I would like to know , if I have source file like this

#include <stdio.h>
int main()
{
   printf("Hello world");
}

as I know header files contains only prototypes of functions. If it so how can my source file get the function printf ? If I don't include the source file where it has been declared? thank you

Upvotes: 0

Views: 792

Answers (5)

Sadique
Sadique

Reputation: 22821

The question is not clear, but there are 2 things which happen before a program gets created,

  1. Compiling (requires prototypes / declarations)

  2. Linking (requires definitions).

Header information is needed for knowing prototypes. Even this would compile fine:

int printf ( const char * format, ... );
int main()
{
   printf("Hello world");
}

On linking there will be no issues because the printf function is found in the C standard library, so on linking it will look into the standard directories (of the compiler where the library is kept - bin/lib folder) and link the function.

The source only needs to know the prototype. The problem a programmer will have in this case:

int my_printf ( const char * format, ... );
int main()
{
   my_printf("Hello world");
}

The above will compile, but when linking my_printf your code will not have a definition so it will give an error on linking.

Upvotes: 3

Raja
Raja

Reputation: 3106

The header file stdio.h would declare printf as an extern function, i.e., it is defined elsewhere. The compiler is happy as long as functions you use have a declaration. The linker is the one that resolves these dependencies.

A very useful thing to do when you start asking good questions like this is to play with some linker commands.

Assuming you're on *nix, once you have your executable file (lets call it foo), do:

ldd foo

You should see a list of libraries that were linked with while creating foo.

libc.so should be one among those. It contains the definition for printf among other things!

You can refer to this link to learn more

Upvotes: 0

usddddd
usddddd

Reputation: 66

Assuming you're using gcc as a compiler the standard libraries are linked by default and that is where the function definitions lie. If you'd like to see exactly which libraries are being linked you can pass gcc the -v option which will cause it to dump information about the default options it will use including the library paths and default libraries and object files that will be linked in.

If you give the -Wl,--verbose option, gcc will pass the --verbose to the linker which will dump exactly where it's looking for libraries, including both failed and successful searches

gcc -v foo.c -Wl,--verbose

Upvotes: 0

ThunderGr
ThunderGr

Reputation: 2367

When it comes to using libraries, you include the header of the library in your code and you instruct the linker to link using the code files of that library(usually object files). For the standard libraries, the IDE usually instructs the linker to link to them by default.

Upvotes: 0

sukhvir
sukhvir

Reputation: 5575

Header file has the definitions declarations of the functions ( stdio.h has definition declaration for printf ). The actual function exists in the libraries and gets linked when you compile the code.

Upvotes: 2

Related Questions