Puede concatenar hecho fichas en el preprocesador, pero tenga cuidado porque es difícil. La clave es el operador ##. Si se va a tirar esto en la parte superior de su código:
#define myexample(x,y,z) int example_##x##_##y##_##z## = x##y##z
continuación, básicamente, lo que hace esto, es que durante el procesamiento previo, que se llevará a cualquier llamada a la macro, tales como los siguientes:
myexample(1,2,3);
y literalmente se convertirá en
int example_1_2_3 = 123;
Esto le permite a una tonelada de flexibilidad mientras que la codificación si se usa correctamente, pero no se aplica exactamente cómo se está tratando de usarlo. Sin embargo, con un poco de masaje, puedes hacer que funcione.
Una posible solución para su ejemplo podría ser:
#define H "Hello "
#define W "World!"
#define concat_and_print(a, b) cout << a << b << endl
y luego hacer algo como
concat_and_print(H,W);
¿Es este un estándar de C++ o solo una característica de gcc? – bibi
En su ejemplo, la concatenación se realiza en tiempo de ejecución no por el preprocesador. –