У меня есть следующий набор макросов (который я получил из первого ответа для Как я могу использовать постоянную времени компиляции __LINE__ в строке?) определен в попытке получить макрос «LOCATION_PREFIX», который я могу использовать для «захвата» местоположения строки кода (будет передан другим функциям, которые будут выполнять регистрацию).
#define STRINGIZE(f,l) STRINGIZE2(f) "(" STRINGIZE2(l)"):"#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)
int main(){
printf("%s here\n", LOCATION_PREFIX);
printf("%s over here\n", LOCATION_PREFIX);
return 1;
}
Выход:
«t.cpp» (8): здесь
«t.cpp» (9): здесь
Я хочу, чтобы вывод был:
t.cpp (8): здесь
t.cpp (9): здесь
Любая помощь очень ценится!
Вам не нужно первое STRINGIZE2
вызов, так как имя файла уже является строкой в кавычках:
#define STRINGIZE(f,l) f "(" STRINGIZE2(l) "):"#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)
int main(){
printf("%s here\n", LOCATION_PREFIX);
printf("%s over here\n", LOCATION_PREFIX);
return 1;
}
Других решений пока нет …