2015-01-17 4 views
0

Можно ли использовать макросы для вставки оператора? (Подобно лексем склеивание, но с фактическим операторомC Макросы - вставка оператора?

Пример:

#define DO(a, operator, b) a ##operator b 

DO(1, +, 3); // 4 
DO(4, <<, 1); // 8 

Примечание - это очень упрощенный пример моего фактического использования случай, что я работаю над алгоритмом с большим количеством бит.. операции сдвига происходит, и я хотел бы быть в состоянии передать, какой оператор сдвига мне нужно макрос (>> или <<), чтобы держать вещи немного проще.

+0

Ошибка компилятора: ошибка: вставка «4» и «<<» не дает действительного токена предварительной обработки DO (4, <<, 1); ' –

+0

Я надеюсь кого-то может по крайней мере указать мне в сторону какого-то синтаксиса, который может достичь этого результата :) –

+0

Вы пробовали '#define DO (a, operator, b) оператор b'? – Cornstalks

ответ

5

Почему не просто

#define DO(a, operator, b) ((a) operator (b)) 

? (также добавлены некоторые скобки безопасности.)

+0

Ничего себе. Теперь я чувствую себя невероятно глупо. Спасибо. –

+0

Обратите внимание, что это C, а не C++, поэтому 'operator' не является зарезервированным ключевым словом (я сделал ту же ошибку). Но я согласен, что этого следует избегать, на всякий случай, когда C-код когда-либо взаимодействует с C++. – Cornstalks

+0

@Cornstalks На самом деле вы правы; после отправки моего ответа я проверил код (на всякий случай) с некоторым уже имеющимся кодом C++ под рукой, а подсветка синтаксиса напомнила мне, что «оператор» зарезервирован; но к тому времени я забыл, что вопрос был помечен C ... глупым надзором с моей стороны. –

Смежные вопросы