Препроцессор умеет конкатенировать параметр макроса с текстом, получая при этом в т.ч. и новый макрос.
Вопрос: можно ли реализовать макрос для "left side value" с условной разверткой, и в случае если конкатенированный макрос не найден, то вызвать функцию?
Примерно так:
#define _io_offset_ 0x20
#define some13 ((unsigned char *)0x26+_io_offset_)
#define macro(p) (some##p)
Вот вместо последней строчки что-то типа:
#define macro(p) (defined(some##p)? some##p : someFunc(p))
Чтобы на выходе препроцессора было
ИЛИ
#define internalLED 13
macro(internalLED) => ((unsigned char *)0x26+0x20)
ИЛИ
int myPinOut;
macro(myPinOut) => someFunc(myPinOut) ?
Надо для написания библиотеки к Ардуино, у которого в такие конструкции разворачиваются типовые макросы AVR-GCC, но в ряде случаев хотелось бы использовать переменный в памяти, а конкатенация практически "исключает" этот процесс...
... или есть иные решения?
Модератор: Пользуйся тегами подветки исходного кода |