¿Hay alguna manera de pasar las palabras exactas al #define sin encadenar? Ejemplo de caso de uso:
#define NUM 1 #define CREATE_FUN(X) \ void prefix_X() { \ // used exact words passed in int x = X; \ // use value later on } CREATE_FUN(NUM)Y la salida se vería así:
void prefix_NUM() { int x = 1; }Use la concatenación de tokens ( ## ):
#define NUM 1 #define CREATE_FUN(X) \ void prefix_##X() { \ int x = X; \ } CREATE_FUN(NUM)#define CREATE_FUN(X) \ int prefix_##X() { \ int x = X; \ return x; \ } CREATE_FUN(NUM)Puede usar el operador Token Pasting (##):
#define CREATE_FUN(X) int prefix_##X() { int x=X; return x;}Ejemplo de caso de uso:
Algunos compiladores proporcionan una extensión que permite que
##aparezca después de una coma y antes de__VA_ARGS__, en cuyo caso
el
##no hace nada cuando VA_ARGS no está vacíoelimina la coma cuando VA_ARGS está vacío.
Esto hace posible definir macros con un número variable de argumentos como fprintf (stderr, format, ##__VA_ARGS__)