История изменений
Исправление MKuznetsov, (текущая версия) :
Вообще такая штука, которую ты как я понял хочешь, обычно делается
#define PRINT(fmt,...) do { \
fprintf(stderr,"%s %d",__FILE__,__LINE__); \
fprintf(stderr,__FUNCTION__); \
/* тут ещё всякое */ \
fprintf(stderr,fmt ## __VA_ARGS__); \
} while(0)
исторически помнится что так. По многим причинам особенностей ##, +можно делать локальные переменные, и всякие совместимости. Но только не в круглых скобках () , они оператор и оставляют результат.
Исходная версия MKuznetsov, :
Вообще такая штука, которую ты как я понял хочешь, обычно делается
#define PRINT(fmt,...) do { \
fprintf(stderr,"%s %n",__FILE__,__LINE__); \
fprintf(stderr,__FUNCTION__); \
/* тут ещё всякое */ \
fprintf(stderr,fmt ## __VA_ARGS__); \
} while(0)
исторически помнится что так. По многим причинам особенностей ##, +можно делать локальные переменные, и всякие совместимости. Но только не в круглых скобках () , они оператор и оставляют результат.