Calling a function from another C file
suggest changefoo.h
#ifndef FOO_DOT_H /* This is an "include guard" */ #define FOO_DOT_H /* prevents the file from being included twice. */ /* Including a header file twice causes all kinds */ /* of interesting problems.*/ /** * This is a function declaration. * It tells the compiler that the function exists somewhere. */ void foo(int id, char *name); #endif /* FOO_DOT_H */
foo.c
#include "foo.h" /* Always include the header file that declares something * in the C file that defines it. This makes sure that the * declaration and definition are always in-sync. Put this * header first in foo.c to ensure the header is self-contained. */ #include <stdio.h> /** * This is the function definition. * It is the actual body of the function which was declared elsewhere. */ void foo(int id, char *name) { fprintf(stderr, "foo(%d, \"%s\");\n", id, name); /* This will print how foo was called to stderr - standard error. * e.g., foo(42, "Hi!") will print `foo(42, "Hi!")` */ }
main.c
#include "foo.h" int main(void) { foo(42, "bar"); return 0; }
Compile and Link
First, we compile both foo.c
and main.c
to object files. Here we use the gcc
compiler, your compiler may have a different name and need other options.
$ gcc -Wall -c foo.c $ gcc -Wall -c main.c
Now we link them together to produce our final executable:
$ gcc -o testprogram foo.o main.o
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents