====== Conditional Inclusion of C functions ======
When developing libraries for embedded systems, its is important to keep the code size under control due to the limited amounts of available memory.
This article discusses a method for using [[The GCC pre-processor|the GCC pre-processor]] to implement a mechanism to control which functions are included and which are excluded from a library.
===== Prepare the source code =====
A pre-processor identifier is associated to each function that we want to control (from here on referred to as conditional function), for instance, for a function called my_function, the pre-processor identifier MYFUNCSPLIT could be used.
* **A.** Each declaration of function is enclosed in an pre-processor ifdef statement as follows :
#ifdef MYFUNCSPLIT
myfunction() {
}
#endif
* **B.** In each source file containing conditional functions add the following pre-processor macros
#ifndef SPLITFILE
#define MYFUNCSPLIT1
#define MYFUNCSPLIT2
#define MYFUNCSPLIT3
...
#endif
===== At compile time =====
Now when we want to control function inclusion, we need to define the pre-processor identifier SPLITFILE and the pre-processor identifiers of the functions that we need to include.
For example, the command line for including myfunction2 and myfunction3 while excluding myfunction1 would be :
gcc -DSPLITFILE -DMYFUNCSPLIT2 -DMYFUNCSPLIT3
What happens is that by defining the pre-processor identifier SPLITFILE, none of the pre-processor identifiers MYFUNCSPLITX will be defined because of what we have done in Step (B) when preparing the code. This means that only functions for which pre-processor identifiers were defined manually using the gcc -D option will be compiled.
{{tag>coding embedded}}
~~DISCUSSION~~