strcmp() 같은, 0과 1을 반환하는 함수를 이용한 테크닉
어떤 값이, 프로그래머가 생각한 값이 맞는지 확인하는 수없이 많은 함수가 존재한다.
간단하게 true / false로 값을 반환하는 경우도 많지만, 일부 함수는 0과 1, 혹은 -1과 0, -1과 1등 숫자를 이용하여 값을 검증하는 경우도 많다.
TRUE / FALSE를 이용하는 함수는 그 자체로 매우 직관적이라서 따로 눈여결 볼 건덕지가 없다.
하지만 숫자를 반환하여 참과 거짓을 판단하는 함수는 몇 가지 테크닉이 존재한다.
예를 들어, 일반적으로 TRUE는 1, FALSE는 0으로 표현할 수 있다.
어떤 값을 검증하는 함수가 0과 다른 숫자를 반환한다면, 오히려 ! <-- 부정을 사용하여 긍정을 표현할 수 있다.
C언어에는 strcmp() 라는 함수가 존재한다.
간단하게, strcmp(A, B)라고 한다면, A와 B를 비교하여 두 값이 같은지 0과 기타 음수, 양수로 반환하는 것이다.
이 경우에 두 값이 같은지 확인하는 방법으로 !strcmp(A, B)를 사용하는 경우도 간혹 존재한다.
예를 들어보자.
// strcmp() 함수를 별도로 구현했다는 가정
String A = "가나";
String B = "가나";
if (strcmp(A, B)) {
// 이 부분은 실행하지 않는다.
}
당연히 A와 B는 두 값이 같다. 하지만 반환값은 0이다.
0은 FALSE를 의미한다.
strcmp() 결과는 참이었지만, 반환값은 거짓으로 해석되어 해당 IF절은 실행되지 않는다.
따라서, A와 B 값이 같다는 것을 조건으로 걸고 싶다면 다음과 같이 해야한다.
// strcmp() 함수를 별도로 구현했다는 가정
String A = "가나";
String B = "가나";
if (!strcmp(A, B)) {
// 이 부분을 실행한다.
}
언뜻 보기에는 두 값이 다를 경우에 IF절을 실행하는 것처럼 보이지만,
실상은 두 값이 같아야 IF절을 실행하는 경우다.
이처럼 숫자를 반환하여 값을 검증하는 함수를 사용할 때는 해당 함수의 반환값이 어떤지 확인하고
0과 1에 맞춰서 생각하는 버릇을 들여야 정반대로 작동하는 함수를 만들지 않는다!