2014-02-02 2 views
4

Есть ли способ 'charify'ing что-то с использованием препроцессора C/C++? Вы можете «stringify», выполнив:Препроцессор C/C++ - 'Charify'

#define STRINGIFY(x) #x 

Итак, будет ли способ «charify'ing используя те же принципы?

+7

'(#x [0])'? (длина) – user3175411

+0

По крайней мере, GCC и, вероятно, Clang обрабатывают '(" string literal "[0])' как константное выражение. – user3175411

+2

@ user3175411, но, к сожалению, C не относится к нему как к постоянному выражению – ouah

ответ

2

Что-то вроде:

#define CHARa() 'a' 
#define CHARb() 'b' 
#define CHARc() 'c' 
// ... 
#define CHARIFY(x) CHAR ## x() 

CHARIFY(a) 
+0

+1, но, к сожалению, работает только для буквенно-цифровых символов. –

+0

, если у вас есть лучшее стандартное решение, которое было бы более конструктивным ... – Joky

+0

Если вы считаете это уродливым, подумайте о том, что вам нужно для операторов. 'CHARIFY (%)' должен расширяться до чего-то вроде 'PREFIX% SUFFIX' без конкатенации маркера (поскольку% не может быть частью токена). Тем не менее последовательность токенов 'PREFIX a SUFFIX' (опять же без конкатенации) также должна быть действительной и постоянным выражением. – MSalters

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