당신은 당신이 의도대로 완료 매크로 assert
(assert.h
)에서보고가있을 수 있습니다. 한마디로
:
그것은 매크로이어야한다
. 그것이 함수라면,이 함수의 파일과 라인을보고 하겠지만 실제로는 함수가 호출되는 파일과 라인을 원할 것입니다. (이 매크로가 도우미로 함수를 호출 할 수 없음을 의미하지는 않습니다.) __FILE__
및 __LINE__
매크로를 사용하면 현재 파일과 행에 액세스 할 수 있습니다.
그래서이는 소스 코드에서 볼 수있는 방법입니다 :
#define LOG_DEBUG(TEXT) log_debug(__FILE__, __LINE__, TEXT)
void log_debug(const char *file, int line, const char *text)
{
fprintf(stderr, "DEBUG '%s':%d: %s\n");
}
test-log-debug.c
MCVE으로 :
#include <stdio.h>
#define LOG_DEBUG(TEXT) log_debug(__FILE__, __LINE__, TEXT)
void log_debug(const char *file, int line, const char *text)
{
fprintf(stderr, "DEBUG '%s':%d: %s\n", file, line, text);
}
/* test/sample */
int main()
{
LOG_DEBUG("in main()");
return 0;
}
가 컴파일 및 Windows 10에 Cygwin에서에서 gcc
테스트 (64 비트) :
$ gcc --version
gcc (GCC) 6.4.0
$ gcc -std=c11 -g -o test-log-debug test-log-debug.c
$ ./test-log-debug
DEBUG 'test-log-debug.c':13: in main()
$
집계하고 다시 윈도우 10에 VS2013에서 테스트 :
DEBUG 'C:\Users\Scheff\tests\test-log-debug.c':13: in main()
visibleman
는 매우 비슷한 질문
SO: Visual C++ equivalent of __FILE__ , __LINE__ and __PRETTY_FUNCTION__이 있음을 지적했다.
AFAIK (또한 답변에 언급 된 것) __FILE__
및 __LINE__
이 표준입니다. 다른/유사한 매크로는 컴파일러의 독점 확장으로 제공 될 수 있습니다.
관련 항목 : https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html – alk
기타 : https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html 및 https ://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html – alk