Я хочу написать функцию, которая будет печатать сообщения об ошибках / предупреждения в моей программе вместе с файлом и номером строки.В C есть эти два макроса:
__FILE__
__LINE__
, но, на мой взгляд, есть проблема ... Когда я пишу такую функцию:
#include <stdio.h>
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
void error(const char *location, const char *msg)
{
#ifdef DEBUG
printf("Error at %s: %s\n", location, msg);
#endif
}
int main(int , char**)
{
error(AT, "fake error");
return 0;
}
В двоичном файле все еще много бесполезных вызовов функций и мусора (значения __FILE__
и __LINE__
при каждом вызове), даже если я отменяю DEBUG
для сборки выпуска.Итак, как я могу сделать это более элегантно?Я хочу что-то вроде этого:
#include <stdio.h>
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
void error(const char *location, const char *msg)
{
printf("Error at %s: %s\n", location, msg);
}
int main(int , char**)
{
#ifdef DEBUG
error(AT, "fake error");
#endif
return 0;
}
Но не писать #ifdef DEBUG
и #endif
до и после каждого вызова функции - это было бы слишком много для такой задачи.И удалять каждый error(AT, "fake error");
звонок вручную тоже не очень элегантно ...
Есть идеи?Может быть, встроить функцию (не поможет, не так ли)?Какой-то макрос или изменение этой конструкции?