I want to be able to create a collection of functions in a header file that I could #include in one of my C Programs.
- Open your favorite text editor
- Create a new file named whatever.h
- Put your function prototypes in it
DONE.
Example whatever.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Note: include guards (preprocessor commands) added thanks to luke. They avoid including the same header file twice in the same compilation. Another possibility (also mentioned on the comments) is to add #pragma once
but it is not guaranteed to be supported on every compiler.
Example whatever.c
#include "whatever.h"
int f(int a) { return a + 1; }
And then you can include "whatever.h" into any other .c file, and link it with whatever.c's object file.
Like this:
sample.c
#include "whatever.h"
int main(int argc, char **argv)
{
printf("%d\n", f(2)); /* prints 3 */
return 0;
}
To compile it (if you use GCC):
$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o
To link the files to create an executable file:
$ gcc sample.o whatever.o -o sample
You can test sample:
$ ./sample
3
$
#pragma once
, which is non-standard but widely supported and (in my opinion) much simpler –
Salsify size_t
argument. If you include <stddef.h>
(the smallest header that typedef's size_t
), then the header can be included anywhere. See the NASA Goddard Space Flight Center coding standard (specifically, the C coding standard). –
Mosaic C
and header files
. I have a doubt. Is it necessary that the header file name and the file containing the definition of the prototypes have the same file name ? In your case whatever.h
and whatever.c
. or is there a stdio.h
and stdio.c
always ? –
Menopause .h
file? because we are not giving any clue where the functions are defined. –
Menopause Header files can contain any valid C code, since they are injected into the compilation unit by the pre-processor prior to compilation.
If a header file contains a function, and is included by multiple .c
files, each .c
file will get a copy of that function and create a symbol for it. The linker will complain about the duplicate symbols.
It is technically possible to create static
functions in a header file for inclusion in multiple .c
files. Though this is generally not done because it breaks from the convention that code is found in .c
files and declarations are found in .h
files.
See the discussions in C/C++: Static function in header file, what does it mean? for more explanation.
© 2022 - 2024 — McMap. All rights reserved.