__PRETTY_FUNCTION__
и __FUNCTION__
не являются макросами препроцессора, такими как __LINE__
или __FILE__
, но магическими константами они недоступны во время препроцессора, но позже во время компиляции (в области действия функции).
Так что все, что вы пытаетесь сделать с макросами здесь, вероятно, все равно не сработает.
Однако ошибка компиляции, вероятно, связана с защитой. Я успешно компилирую не очень разные программы (см. Ниже) без каких-либо проблем. Но, как я уже сказал выше, FUNCTION_NAME всегда будет иметь пустую строку.
заголовочный файл xx.h
#ifndef H_XX_H
#define H_XX_H
#ifndef FUNCTION_NAME
void Dummy_Func_For_Generating_FUNCTION_NAME_Macro()
{
#ifdef __PRETTY_FUNCTION__
#define FUNCTION_NAME __PRETTY_FUNCTION__
#elif __FUNCTION__
#define FUNCTION_NAME __FUNCTION__
#elif __func__
#define FUNCTION_NAME __func__
#else
#define FUNCTION_NAME ""
#endif
;
}
#endif
#endif
Исходный файл xx.c
#include <stdio.h>
#include "xx.h"
main(){
printf("%s\n", FUNCTION_NAME);
}