source

호출기능의 파일명, 회선번호, 함수명 출력 - C Prog

manysource 2023. 10. 27. 22:01

호출기능의 파일명, 회선번호, 함수명 출력 - C Prog

info(), debug(), error() 함수가 포함된 log.c 파일을 만들고 싶습니다.이러한 기능은 파일 이름, 라인 번호 등을 인쇄하지 않고 작동합니다.그래서 이 기능 중 하나를 호출할 때 호출자의 파일명, 회선번호, 기능명을 덤프하고 싶습니다.정확히 어떻게 역추적을 할 수 있죠?C를 역추적할 수 있는 방법이 있나요, 아니면 매크로를 사용한다면 어떻게 할 수 있나요?

매개 변수를 통해 데이터를 함수에 전달합니다(매크로의 도움을 받을 수도 있음).

int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }

그리고 그들을 부르는 것은

info(__FILE__, __LINE__, __func__, ...);
debug(__FILE__, __LINE__, __func__, ...);
error(__FILE__, __LINE__, __func__, ...);

참고:__func__C99; gcc, 모드 C89에서__FUNCTION__

매크로를 사용한다면, 이것을 사용해서 만들 수 있을 것이라고 생각합니다.__FILE__,__LINE__,그리고.__FUNCTION__.예를들면,

#define INFO(msg) \
    fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \
    fprintf(stderr, "%s", msg);

기능도 사용할 수 있지만 전달해야 합니다.__FILE__, 그들이 정확한 값을 가졌는지 확인하기 위해서입니다.

언급URL : https://stackoverflow.com/questions/8884335/print-the-file-name-line-number-and-function-name-of-a-calling-function-c-pro