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
 Chiyando
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Chiyando
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  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
Обсуждают сегодня