Условная компиляция в зависимости от аргумента функции?

Я искал повсюду, и информация в сети, кажется, предполагает, что условная компиляция с использованием препроцессора работает исключительно с переменными среды.

В принципе, я хотел бы, чтобы встроенная функция или макрос выполняли различные операции в зависимости от своих входных аргументов.Пример того, чего я хочу достичь:

inline void foo(int x) {

    #if (x < 32)

        register0 |= (1 << x);

    #else

        register1 |= (1 << (x - 32));

    #endif

}

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

В основном, я сейчас программирую для микроконтроллера (lpc213x) и хотел бы иметь встроенную функцию или макрос для настройки конфигурации контактов. Поскольку конфигурации выводов разделены на несколько регистров (например, 0 и 1 выше), я хотел бы выполнить некоторые условные проверки, чтобы решить, в какой регистр должна быть произведена запись для данной константы вывода.

Однако все конфигурации выводов постоянны во время компиляции, поэтому я хотел бы исключить условные проверки из кода компиляции. Я знаю, что оптимизация, скорее всего, в любом случае избавит от ненужных условных выражений, но мне интересно, есть ли способ добиться такого поведения явно, потому что мне может потребоваться отключить оптимизацию в будущем.

Спасибо,

FRob

5
задан AstroCB 2 November 2014 в 18:59
поделиться