169 похожих чатов

Назрел вопросец касаемо перегрузки функции или чтото подобного. приступил к

вычислениям в калькуляторе.

переделал стек под такую структуру

typedef struct stack {
enum type type;
union var value;
struct stack *prev;
} stack;

enum type {
sign = 1,
dig = 0,
};

union var {
int sign;
double digit;
};

грубо говоря один стек где будут хранится знаки(+ - cos asin mod log и тд) в интовом значении

и там же будут храниться числа в даблах

делаю функцию push(int/double value, stack** out)

возможно ли реализовать как то таким образом, чтобы в функцию можно было подать и инт и дабл, и в зависимости от типа данных функция записывала значения в нужный union и выставляла правильный enum?

23 ответов

45 просмотров

Ну тут 2 путя, либо _Generic, либо обёртка, принимающая void * и указатель на функцию обработки, но в любом случае придётся написать 2 функции Хотя можно макросом нагенерить их.

Andrey-Andrey Автор вопроса
Andrey Andrey
есть почитать чего на эту тему?

гугл: _Generic си Либо стандарт 11 посмотри

Andrey-Andrey Автор вопроса
`` 🇫🇷 ;; chantant dans des vieux bars, me balançant avec les vieillies étoiles, vivant pour la gloire
Зачем все так усложнять

а как можно проще? я пришел к тому что деверсифецирую. сначала перевожу в обратную польскую запись, потом считаю. можно конечно просто выходную строку перед вычислениями делать не списком а массивом чаров, потом еще раз перепарсить и сосчитать. но чото совсем зашкварно будет )

Andrey Andrey
а как можно проще? я пришел к тому что деверсифеци...

А переводить одну запись в другую не зашкварно? Почему бы сразу тогда в обратной польской записи не писать?

Andrey-Andrey Автор вопроса
`` 🇫🇷 ;; chantant dans des vieux bars, me balançant avec les vieillies étoiles, vivant pour la gloire
А переводить одну запись в другую не зашкварно? По...

ну человек же обычный записывает запись на подсчет в обычной инфексной записи ) когда пользуется кулькулятором

Andrey Andrey
а как можно проще? я пришел к тому что деверсифеци...

Проще всего сделать лексер, который будет выдавать токены, которые потом отдадутся парсеру, впоследствии получится дерево, проходя по его ветвям можно легко вычислять значения

Andrey Andrey
чот сложно написано, пока что скила не хватит на т...

Да просто сделай обработку по принципу компиля, да и всё

Andrey-Andrey Автор вопроса
Денис Rabbit
Ну тут 2 путя, либо _Generic, либо обёртка, приним...

если я все правильно понял, то логика следующая объявляю генерик на инт и дабл перед функциями когда только приходит value некое делаю проверку генериком что там инт или дабл и потом делаю ветвление на 2 функции push_Int() и push_Double() так? или как мне сделать так, чтобы в аргумент функции поступало некое value(int или дабл)?

Andrey Andrey
если я все правильно понял, то логика следующая о...

Нет, вместо своих строчек подставляешь сами вызовы функций

Andrey-Andrey Автор вопроса
Денис Rabbit
screenshot

то что стоит под Y могу прописать уже внутри функции где буду вызывать что угодно да? а то я уже начал делать, думал это тоже в дефайне обязательно прописывать

Не понял вопроса

Andrey-Andrey Автор вопроса
Денис Rabbit
Не понял вопроса

а, да я чот затупил. щас разобрался.

Денис Rabbit
screenshot

подсветка синтаксиса топ

А зачем нужна перегрузка, когда еще столько свободных имён ?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта