Можно ли перегрузить операторы в C?
Можно ли перегрузить операторы (например, операторы сравнения) в C?
Если так, то как ты это делаешь? Я сделал быстрый поиск, но все, что я нашел, было для C++, и что я хочу, это для C.
У кого-нибудь есть идеи?
Edit1: идея заключается в следующем: у меня есть структура, и мне нужно сделать сравнение (на основе члена структуры). И для этого я хотел бы связать операторов по сравнению с моим новым "типом данных".
Edit2: я полностью осознаю, что я могу обойтись без использования перегрузки операторов, но мне было интересно, если вы можете сделать это с перегрузкой.
Ответ: Концепция перегрузки связана с объектно-ориентированным программированием. Поскольку C не является объектно-ориентированным и, следовательно, не может содержать концепцию перегрузки. (:
4 ответа
Нет, это невозможно. C не поддерживает перегрузку операторов.
Если под перегрузкой вы подразумеваете определенные пользователем перегрузки операторов, то ответ - нет. Тем не менее, некоторые из предопределенных операторов, таких как *
, +
и т. д. перегружены (если вы об этом думаете) для арифметических типов. *
является особенным, поскольку он также имеет перегрузку для разыменования указателей.
C не поддерживает перегрузку операторов или функций. Там нет, как вы можете переопределить <
, <=
, >
, >=
, ==
, или же !=
сравнивать типы структур напрямую.
Начиная с C11 вы можете перегружать функции, используя макросы с _Generic. Он позволяет выбрать одно из нескольких выражений во время компиляции на основе типа управляющего выражения.
Например (он также работает с более чем одним параметром):
#define f(X) _Generic((X), \
uint8_t: f_uint8_t(X), \
uint16_t: f_uint16_t(X), \
uint32_t: f_uint32_t(X) \
)
Таким образом, вместо стандартных операторов вы можете определить такие макросы, как ADD(X, Y); SUB(X, Y) и т. д.