Count lines between two code locations in C preprocessor
c, c-preprocessor
Solution
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];}
Problem
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!