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

12 просмотров

Ну тут 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 Автор вопроса
BlackBloodyRabbit Rabbit
Ну тут 2 путя, либо _Generic, либо обёртка, приним...

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

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

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

Andrey-Andrey Автор вопроса
BlackBloodyRabbit Rabbit
screenshot

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

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

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

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

BlackBloodyRabbit Rabbit
screenshot

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

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

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта