I want to use the C preprocessor to count the amount of lines between two code locations. The basic idea is something like this:
#define START __LINE__
static char* string_list[] = {
"some string",
"another string",
...
"last string"
};
#define END __LINE__
#if END - START > 42
#error Too many entries
#endif
Of course this doesn't work because in this case START
and END
are merely redefinitions of the __LINE__
macro.
I was playing around a bit with the #
and ##
operators, but I could not get the preprocessor to evaluate START
and END
while the preprocessor is running.
My question is: is this possible at all?
Checking the size of the array during runtime is not an option.
Thanks for any hints or ideas in advance!
You shouldn't use those macros for that purpose: the code will become completely unmaintainable if you introduce an extra line somewhere. And what if there are too few lines?
Instead of macros, use a static assert:
static_assert(sizeof(string_list) / sizeof(*string_list) == SOME_CONSTANT,
"Wrong number of entries in string list.");
If you aren't using C11 which has support for static_assert, you can write such an assert yourself, for example like this:
#define COMPILE_TIME_ASSERT(expr) {typedef uint8_t COMP_TIME_ASSERT[(expr) ? 1 : 0];}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With