Hi

Say I want to write a header file as an exercise. It will contain a bunch of functions and some constants.

Q1. I noticed that the standard header files only contain the function prototypes.
a> Where are the actual functions?
b> How do I write a header file such that the actual functions are separately stored?
c> How are these two files connected?
d> What is the advantage of this?

Q2. How do I include this header file in my code? Just the normal #include<>?

Thanks.

a> Where are the actual functions?

Linked into the compiler as either static libraries or dynamic libraries.

b> How do I write a header file such that the actual functions are separately stored?

The header file should contain only declarations. You'll provide definitions in a separate .c file that is subsequently compiled and linked with calling code:

/* header.h */
#ifndef HEADER_H
#define HEADER_H

void foo(); /* Declaration only */

#endif
/* header.c */
#include <stdio.h>
#include "header.h"

void foo()
{
    puts("FOO!!!!");
}
/* main.c */
#include "header.h"

int main(void)
{
    foo();

    return 0;
}
$ gcc header.c main.c

c> How are these two files connected?

The #include directive takes the contents of the file and pastes it over itself. The main.c file above would look like this after such a paste:

/* main.c */
/* header.h */
#ifndef HEADER_H
#define HEADER_H

void foo(); /* Declaration only */

#endif

int main(void)
{
    foo();

    return 0;
}

So at link time the header files no longer exist. Provided the declarations are available, your code will compile. Then the linker puts the definitions and calling code together.

d> What is the advantage of this?

You don't have to put everything in one epically huge file.

Q2. How do I include this header file in my code? Just the normal #include<>?

Convention is to use double quotes instead of angle brackets for headers you write.

Thanks guys. I'll see what I can learn from all this.

New questions!
a> What is static library? What is dynamic library?
b> What is the difference between c code, object code and exe file??
c> What is this linker? How does it work?
d> What does #ifndef HEADER_H statement mean? More specifically, what is HEADER_H?

a> What is static library? What is dynamic library?

What is google?

b> What is the difference between c code, object code and exe file??

C code is human readable source code. Object code is C code compiled into machine readable instructions. EXE files are directly executable object code.

c> What is this linker? How does it work?

What is google?

d> What does #ifndef HEADER_H statement mean? More specifically, what is HEADER_H?

It's an inclusion guard.

This question has already been answered. Start a new discussion instead.