Похоже, у вас есть #define
задом наперед. Если вы хотите использовать __func__
на обеих платформах, а WIN32 имеет __FUNCTION__
, но не __func__
, вам нужно сделать это вместо:
#if defined ( WIN32 )
#define __func__ __FUNCTION__
#endif
Возможно, есть лучший способ узнать, нужно ли вам определять __func__
или нет, но этот быстрый взлом должен сработать.
Помните, что на компиляторах, которые поддерживают ключевые слова __FUNCTION__
и __func__
, они не являются макросами, поэтому вы не можете делать следующее (поскольку #ifndef __func__
недопустимо):
#ifndef __func__
#define __func__ __FUNCTION__
#endif
Из спецификации C99:
6.4.2.2 Предопределенные идентификаторы
1 Идентификатор __func__
должен быть неявно объявлен переводчиком, как если бы сразу после открывающей скобки каждого определения функции было объявлено
static const char __func__[] = "function-name";
Появилось
, где имя-функции - это имя лексической функции.