Soy relativamente nuevo en C++ y estoy tomando una clase en él. A nuestra clase se le asignó un laboratorio y mi maestra dijo que la escritura del laboratorio es un poco difícil de entender; sin embargo, no realizó ningún cambio en la descripción del laboratorio. Por lo tanto, me encontré con esta parte de la práctica:Definición de un macro del preprocesador
Definición de un preprocesador de las macros
convenio independiente a largo capitaliza los nombres de macros, y esta macro debe ser TRACE_FUNC. La macro tiene un solo parámetro, un símbolo que será reemplazado por un nombre de función cuando aplique la macro al código. El inicio de la macro se parece a esto:
#define TRACE_FUNC(symbol) replacement-text`
y el preprocesador sustituirá el texto de reemplazo de todo el mundo que existe la (SYM) TRACE_FUNC cadena en el código fuente, y alimentar el símbolo en que el reemplazo.
NOTA: la instrucción #define debe estar en una única línea lógica. Para mantener la longitud manejable, puede escapar del carácter de nueva línea con una barra invertida al final de la línea; eso mantendrá feliz al preprocesador y le permitirá abarcar una definición en múltiples líneas.
Para este ejercicio, el texto de reemplazo debe ser una declaración completa, incluido el punto y coma de terminación.
El texto de reemplazo debe ser una declaración de salida que imprime el símbolo seguido del texto() llamado. y una nueva línea para salida estándar. Puede copiar y modificar una de las declaraciones de salida del archivo fuente warning.cpp.
warning.cpp
es solo un archivo que estamos usando y TRACE_FUNC
se está colocando en un archivo de encabezado.
Por lo tanto, leo esto un par de veces y no estoy 100% seguro de lo que está pidiendo. Mirándolo de una manera, parece que me está pidiendo que cree una macro llamada TRACE_FUNC. Si lo miras de otra manera, me está pidiendo que use la macro TRACE_FUNC. Todo eso está bien, pero no sé cómo usar TRACE_FUNC en absoluto, no puedo encontrar ninguna documentación en él y no sé cómo crear una macro. Cuando pedí ayuda, mi maestra simplemente dijo algo. palabras y no muy útiles porque era una respuesta muy sinuosa y confusa sin explicación de lo que realmente es TRACE_FUNC.
Básicamente, todo lo que mi maestro dijo fue que el símbolo dentro de TRACE_FUNC
debe ser el nombre de una de las funciones en el código fuente. Como ejemplo, digamos que teníamos una función foo()
dentro de advertencia, entonces el símbolo se supone que es foo()
(o foo, no estoy seguro de eso, tampoco), de su explicación. Además, en el texto de reemplazo, aparentemente el nombre en sí será reemplazado si puse #
frente al símbolo. Pensé que eso suponía denotar las directivas del preprocesador. ¿Por qué se supone que debo usarlo aquí?
De todos modos, hacer lo que dice mi profesor casi no hace nada. Ni esta línea
#define TRACE_FUNC(foo()) #foo() called. ;
ni esta línea
#define TRACE_FUNC(foo) #foo() called. ;
reemplazar cualquier texto, que estoy bastante seguro de que es la operación de la directiva #define.De modo que debo aplicar lo que mi maestro dijo de la manera incorrecta, pero realmente no sé por qué está mal o cómo solucionarlo.
Entonces, mi pregunta. ¿Es realmente TRACE_FUNC
una macro y, de ser así, hay documentación que pueda leer? ¿O se supone que debo crear TRACE_FUNC
y, de ser así, cómo se supone que debo hacer eso exactamente?
Gracias! Esto fue mucho más claro de lo que mi maestra estaba diciendo. – FoolishOrpheus
Considere también http://stackoverflow.com/a/257425/1689451 sobre cómo definir macros de función. –