Reputation: 57708
I have a header file that is going to contain a large amount (30+) of inline functions.
Rather than having the reader scroll or search for the definition (implementation) of the inline function, I would like to have a forward declaration section that states the function declaration with comments describing the function. This section would allow the reader to find out how to use a function or to look for a function without having to scroll down to the implementation.
Also, I would like the readers to get in the habit of using functions without having to see their implementations.
What is the syntax for a forward declaration of a stand-alone function?
{This applies to C99 and C++}
FYI, I am using IAR Workbench C compiler set to use C99.
Upvotes: 22
Views: 13208
Reputation: 62975
No differently than a non-inline function:
void func(); // "forward" declaration
// ...
inline void func() // definition
{
// impl
}
Typically the pattern used to "hide" the definitions from the library consumer is to put the declarations in one header (a.h
) and the definitions in a second header (a_def.h
), then have the former #include
the latter (inclusion guards omitted for brevity):
// a.h
void func();
#include "a_def.h"
// a_def.h
inline void func()
{
// impl
}
The library consumer would simply #include <a.h>
.
Upvotes: 25
Reputation: 7734
To work with both C++ and C99, make the declaration inline too, like this:
// declaration
inline void foo(void);
// implementation
inline void foo(void) {
print("foo");
}
Upvotes: 1
Reputation: 385194
You don't need to "forward declare" it (a term that is usually only applied to types, since we usually define them in the same place that we first declare them).
Just declare it, like normal:
#include <iostream>
void foo(); // Declaration
inline void foo() { // Defining declaration
std::cout << "!";
}
// ---------------------------------------------
int main() {
foo(); // Output: foo()
}
Upvotes: 3