От finding-c++-static-initialization-order-problems, Я хочу определить макрос в файле заголовка, например. «check_fiasco.h», затем поместите этот файл заголовка в начало каждого файла cpp, как идея Уоррена Стивенса. Тем не менее, я пробовал его код под Linux, и он не работает (он компилируется, но сбой при его выполнении).определить макрос с именем файла
Я попробовал следующий макрос:
#define TOKENCONCAT(x, y) x ## y
#define file_init_(x, y) TOKENCONCAT(x, y)
#define FIASCO_FINDER_DEC \
void file_init_(file_, __FILE__)(void) ((constructor)) ;
#define FIASCO_FINDER_IMPL \
void file_init_(file_, __FILE__)(void) __attribute__ {\
printf("Good Morning, %s!\n", __FILE__);\
return ;\
}
Однако, это не работает, как имя файла вклейки с «/» не допускается для имени функции. Я не могу использовать __COUNTER__
, так как декларация и реализация должны быть одинаковыми.
Любые идеи?
Это проблема на C++ и не имеет ничего общего с C. Я удалю тег C. – Lundin