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 ответов

40 просмотров

Ну тут 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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта