Похожие чаты

In the following code I want to have a loop

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?

6 ответов

11 просмотров

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'); }

Thomas
static inline void showBirthdayCandles(Person p) {...

static is not visible to linker anyway then why do you use inline for this function?

Похожие вопросы

Обсуждают сегодня

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Another way to think about it is like this: let's say we sell $100m of FXB2029 and another $100m of FXB2055 and we buy $200m of ETH with it. Do you think that ETH price will b...
Sam Kazemian ¤⛓️¤
20
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
Нет ничего более бессмысленного, чем рассуждать о нынешней американской политике, пытаясь запихнуть ее в категории "правого" и "левого" старого образца. Ибо эти понятия нынче ...
Foxcool
1
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Guys I'm working on an infographic and thought I'd crowdsource this a bit. Anyone interested in writing 3 sentences or less about why each of the following cryptos deserve to ...
TMR.ΣRG
10
What will be done for the $UOS price in the short term ? as it is really going to the cave right now…
DioZ
15
Карта сайта