Вы действительно можете объединять токены в препроцессоре, но будьте осторожны, потому что это сложно.Ключом является оператор ##.Если вы добавите это в начало вашего кода:
#define myexample(x,y,z) int example_##x##_##y##_##z## = x##y##z
, то, в основном, это то, что во время предварительной обработки он будет принимать любой вызов этого макроса, например, следующий:
myexample(1,2,3);
, и он буквально превратится в
int example_1_2_3 = 123;
Это дает вам большую гибкость при кодировании, если вы используете его правильно, но это не совсем то, что вы пытаетесь использоватьЭто.Немного помассируя, вы можете заставить его работать.
Одним из возможных решений для вашего примера может быть:
#define H "Hello "
#define W "World!"
#define concat_and_print(a, b) cout << a << b << endl
и затем сделать что-то вроде
concat_and_print(H,W);