У меня есть макрос, в котором я передаю аргумент и использую его, определяющий новую переменную на основе имени ввода:
#define DO_X(x) char _do_x_var_ ## x; /* other things */
Проблема в том, что если я передаю переменную структуры, она ломается:
DO_X(some_struct->thing)
становится:
char _do_x_var_some_struct->thing; /* other things */
РЕДАКТИРОВАТЬ: То, что я хочу, чтобы это было оценено:
char _do_x_var_some_struct__thing; /* other things */
(или любое допустимое имя переменной, содержащее что-то подобноена вход)
То, что я на самом деле хочу, чтобы это работало:
#define DO_X(x) for(char _do_x_var_ ## x; /*things*/)
DO_X(x){
DO_X(y) {
/*things*/
}
}
DO_X(object->x){
DO_X(object->y) {
/*things*/
}
}
, но чтобы это не сработало:
#define DO_X(x) for(char _do_x_var_ ## x; /*things*/)
DO_X(x){
DO_X(x) { // <-- multiple definition of _do_x_var_x
/*things*/
}
}
DO_X(object->x){
DO_X(object->x) { // <-- multiple definition of _do_x_var_object__x (or whatever)
/*things*/
}
}
Есть ли способ сделатьэта работа?Может быть, заменить ->
на __
или что-то?Я нашел способы объединить, но не заменить строки ..