in a macro that uses a counter variable of the same type as a struct member. A value of the struct is passed into the macro.
#include <stdio.h>
typedef struct {
char const * name;
int age;
} Person;
// Shows a candle in the form of letter i, which looks a little like a candle,
// for each year a person has been alive
#define showBirthdayCandles(person) \
({ typeof(person) const p = (person); \
for (typeof(p.age) i = 0; i < p.age; i++) { putchar('i'); } })
int main(void) {
Person me = { "Chiyando", 4 };
showBirthdayCandles(me);
return 0;
}
Problem with this is that it won't compile. It says that i is read-only (const). This is because i's type comes from p which is const.
I realize this is a contrived example that could be easily solved by hardcoding i as int or removing const from p but what I didn't want to do either of those things. Is there a way I can discard constness from a type that's determined using typeof?
I think this whole thing should be reconsidered lol
What do you think I'm doing with it?
I mean if you're running into problems like this with the preprocessor, this is not a place you should be using the preprocessor
static inline void showBirthdayCandles(Person p) { for (int i = 0; i < p.age; i++) putchar('i'); }
static is not visible to linker anyway then why do you use inline for this function?
Just to indicate the intention
Обсуждают сегодня