printf를 이용하여 로그를 출력해서 디버깅을 완료하였다고 하자.
이제 정답을 제출해야 되므로 printf를 모두 삭제하거나, 주석 처리해야 한다.
하지만 이 과정은 꽤 번거롭다.
지우는 것도 일이지만, 정답이 아닌 경우 지웠던 printf를 다시 복구하는데 시간이 꽤 많이 쓰인다.
#define을 이용해서 printf를 재정의하면 이런 일을 간단히 해결할 수 있다.
아래 코드를 실행해보자.
#include <stdio.h>
#define P printf
int main()
{
P("hello!\n");
P(">> %s %d\n", "world", 100);
return 0;
}
#define을 이용하여 printf를 P로 재정의했을 뿐이다.
그러니 원래 printf의 효과와 같다.
이제 #define P뒤에 printf를 지워보자.
#include <stdio.h>
#define P
int main()
{
P("hello!\n");
P(">> %s %d\n", "world", 100);
return 0;
}
PRINTF 뒤에 아무것도 정의하지 않았기 때문에 printf가 아무 효과가 발생하지 않는다.
실제 코드를 변경해보면서 테스트해보자.
삼성 SW 역량 시험 환경에서 User code(user.cpp)에 코드를 제출할 때 코드에 printf가 남아 있으면,
'printf' was not declared in this scope 에러가 발생한다.
컴파일 오류 : 오류 메시지 : solution.cpp: In funciton 'xxx':
error: 'printf' was not declared in this scope
하지만 위의 코드는 #define으로 P를 아무것도 정의하지 않았기 때문에 에러가 발생하지 않는다.
참고로
> #define printf printf 로 사용해도 같은 효과를 얻을 수 있다.
printf를 printf로 다시 정의하였고, printf를 다시 아무것도 정의하지 않으면 아무것도 출력하지 않는다.
하지만, 이 경우에는 시험환경에서
허용하지 않는 라이브러리가 사용되었습니다. >printf
에러가 발생한다.
그러므로 다른 이름으로 printf를 정의 하는 것이 편하다.
특정 로그만 지우기
아래와 같이 printf를 여러 개 새로 정의하고, 특정 함수나 원하는 위치에서만 로그를 세분화해서 사용할 수 있다.
#include <stdio.h>
#define P1 printf
#define P2 printf
#define P3 printf
int main()
{
P1("hello!\n");
P2(">> %s %d\n", "world", 100);
P3("I love C++\n");
return 0;
}
P2라고 정의한 곳만 로그를 지우고 싶다면 P2 뒤에 printf를 지우고 아무것도 정의하지 않으면 된다.
#include <stdio.h>
#define P1 printf
#define P2
#define P3 printf
int main()
{
P1("hello!\n");
P2(">> %s %d\n", "world", 100);
P3("I love C++\n");
return 0;
}
P2로 정의한 [ >> %s %d\n", "world", 100 ]은 아무일도 하지 않는다.
따라서 출력할 로그를 처음부터 세분화한다면, 원하는 로그만 쉽게 끄고 켤 수 있다.
'알고리즘 > [PRO] 삼성 SW 역량 테스트 B형' 카테고리의 다른 글
함수의 매개변수와 배열의 register 속도 비교 (0) | 2023.08.15 |
---|---|
BOJ 10999 : 구간 합 구하기 2 with 나중에 업데이트하기 (Top-Down Segment Tree with Lazy Propagation) (0) | 2023.01.16 |
BOJ 2042 : 구간 합 구하기 with 바텀 업 세그먼트 트리 (Bottom-Up Segment Tree) (0) | 2023.01.15 |
BOJ 2042 : 구간 합 구하기 with 탑 다운 세그먼트 트리 (Top-Down Segment Tree) (0) | 2023.01.15 |
BOJ 2042 : 구간 합 구하기 with 제곱근 분할법 (Sqrt Decomposition) (0) | 2023.01.15 |
댓글