Тема: Макрос-функція видаляє зовнішню пару круглих дужок [препроцесор]
Хочу створити макрос-функцію, яка приймає 1 арґумент (довільний* вираз), який може мати вигляд:
(expr) , або
(((expr))) , або
expr (без дужок).
І яка буде видаляти одну пару зовнішніх дужок, якщо вони існують, або вертати сам вираз, якщо зовні дужки відсутні.
Для простоти будемо ґарантувати що вираз не містить ",", ")(", або інших хитрих несподіванок.
Для цього зробив таку штуку :
#define JOIN(A, B) A##B
#define JUST(X) X
#define INSIDE(X) JOIN(JUST, X)
INSIDE видаляє рівно одну пару дужок, коли вони є, або ґенерує помилку як наслідок конкатенації (JUSTexpr).
Зараз є таке :
INSIDE( ((( i ))) ) // (( i ))
INSIDE( (( i )) ) // ( i )
INSIDE( ( i ) ) // i
INSIDE( i ) // JUSTi
А я хочу таке :
INSIDE( ((( i ))) ) // (( i ))
INSIDE( (( i )) ) // ( i )
INSIDE( ( i ) ) // i
INSIDE( i ) // i
Чи можливо це взагалі ?