online ejemplos descargar definicion caracteristicas c++

ejemplos - ¿C++ concatenando las macros__FILE__ y__LINE__?



c++ online (1)

Necesitas expandir esa macro en dos niveles:

#define S1(x) #x #define S2(x) S1(x) #define LOCATION __FILE__ " : " S2(__LINE__)

¿Por qué?

Respuesta corta: necesita expandir __LINE__ en dos niveles, antes de pasarlo a #x .

Respuesta larga: en primer lugar, al utilizar el operador # en una macro similar a una función , debe ir seguido de un parámetro de macro, pero __LINE__ no es un parámetro, por lo que el compilador se queja de que es un operador parásito.

Segundo, __LINE__ sí mismo es una macro y contiene el número de línea actual, debe expandirse al número antes de usarlo con # , de lo contrario, obtendrá la cadena "__LINE__" lugar de un número.

La macro S2(__LINE__) expande __LINE__ a un número de línea, luego pasamos el número de línea a #x .

Quiero que mis mensajes de excepción contengan información sobre la ubicación de la excepción.

Así que me gustaría tener algo parecido a esto.

#define LOCATION __FILE__ " : " __LINE__ throw std::exception(std::string("ABCD. ") + LOCATION);

Esa definición es obviamente incorrecta. ¿Cómo lograr esto?