[c preprocessor] конкатенация двух переменных

a10063


#define A s1
#define B s2

не подскажете, как получить макрос C со значением s1s2 и возможно ли?

Ivan8209

Навряд ли это возможно.
В любом случае, не надо так извращаться,
cpp для этого не предназначен.
Возьми m4.
---
...Я работаю антинаучным аферистом...

vall

#define AB A##B
вроде

Ivan8209

Оно не решает поставленной задачи.
---
...Я работаю антинаучным аферистом...

a10063

cpp для этого не предназначен.

я понимаю, однако это в одном месте надо сделать, не хотелось бы приплетать что-то внешнее
Навряд ли это возможно.

после получаса извращений у меня стало складываться такое же впечатление

yolki

Что есть s1, s2?
В более продвинутом использовании можно так:

#define concat(a,b) a ## b
int concat(func,tionint x);

результат эквивалентен такому (вывод gcc -E ):

int function(int x);

a10063

Что есть s1, s2?
это строки
считайте, что нам они не известны, а есть только макросы A и B

Ivan8209

Я думаю, что если бы это было возможно,
то существовал бы примитив определения макроса.
Как define в m4.
Такого примитива в cpp я не помню.
---
...Я работаю антинаучным аферистом...

vall

#define A "x"
#define B "y"
#define C A B
#include <stdio.h>
int main {
printf("%s\n", C);
}

a10063


извини, видимо, я неясно выразился
не Си-строки
не знаю, как объяснить...
хочу, чтобы для

#define A s1
#define B s2
#define C ?
C

gcc -E выдавал s1s2

evgen5555



не Си-строки
не знаю, как объяснить...
Лол?

a10063

все-таки возможно
понимание пришло только тогда, когда начал понимать, по какому алгоритму работает препроцессор
решение:
#define _CONCATENATION(a,b) a ## b
#define CONCATENATION(a,b) _CONCATENATION(a,b)
#define A s1
#define B s2
#define C CONCATENATION(A,B)

Ivan8209

Вычисление путём передачи параметров?
Охренеть извращение.
Не люблю cpp.
---
...Я работаю антинаучным аферистом...

a10063

Вычисление путём передачи параметров?
Охренеть извращение.
ага. я тоже в шоке.

Olenenok

Ёпта! А я и не знал как ещё головой об стенку можно биться!

mira-bella

для меня тоже было открытием
особенно замечательно, что это корректно согласно стандарту (т.е. никакого неопределенного поведения зависящего от реализации тут нет)

yolki

а что в этом удивительного? cpp очень даже продуманно сделан имхо.

evgen5555

Самый продуманный - в C#

mira-bella

а что в этом удивительного?
я и не говорю, что удивительно
cpp очень даже продуманно сделан имхо.
но про стандарт C в целом этого не скажешь, имхо.
Оставить комментарий
Имя или ник:
Комментарий: