인터넷에서 해결책을 찾아 본 후 해결책이 필요한지 여기에서 질문했습니다.MACROS를 사용하여 기능을 사용하지 않음
나는 간단하고 모듈화 된 C 로깅 라이브러리를 작성하려고 노력 중이며, PhD 학생과 연구원이 로깅 시스템의 영향을 가능한 한 많이 줄이는 알고리즘을 디버깅하는 것을 특별히 돕고 있습니다.
내 문제는 내가 로거의 비용이 C 코드는 다음과 같이 것입니다 0
인 실행 파일을 생성하는 컴파일시 로깅 시스템을 해제 할 수있는 라이브러리의 사용자를 가능하게 할 것입니다 :
...
logger_t * logger;
result = logger_init(logger);
if(result == -1) {...}
...
이것은 단순히 로거를 초기화합니다. 예제 코드를 찾고 assert.h 헤더를 확인했지만 내 경우에는 soulution이 경고 목록을 표시한다. 사실, logger_init()가 매크로를 사용하여 0으로 대체되면 로거 변수가 사용되지 않습니다. 나는이 방법을 사용하기로 결정했습니다 이러한 이유로
:
int logger_init(logger_t *logger);
#ifndef NLOG /* NLOG not defined -> enable logging */
int logger_init(logger_t *logger) {
...
}
#else /* NLOG defined --> the logging system must be disabled */
#define logger_init(logger) (int)((logger = NULL) == NULL)
#endif /* NLOG */
이 경고가 발생하지 않습니다와 나는 또한 함수를 호출의 오버 헤드를 피할 수 있습니다. 실제로 첫 번째 시도는 다음과 같이 수행했습니다.
필요없는 경우에도 함수를 계속 호출합니다.
내 솔루션이 좋은 해결책으로 여겨 질 것이라고 생각하십니까? 더 나은 해결책이 있습니까?
고맙습니다. 건배, 아르
빈 함수는 작업을 수행하고 컴파일러는 인라인으로 처리 한 다음 제거합니다. – paulm