препроцессор c — конкатенация C ++ в макросе

У меня есть следующий набор макросов (который я получил из первого ответа для Как я могу использовать постоянную времени компиляции __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): здесь

Любая помощь очень ценится!

1

Решение

Вам не нужно первое 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;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]