LINUX.ORG.RU

История изменений

Исправление 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)

исторически помнится что так. По многим причинам особенностей ##, +можно делать локальные переменные, и всякие совместимости. Но только не в круглых скобках () , они оператор и оставляют результат.