어떤 값이, 프로그래머가 생각한 값이 맞는지 확인하는 수없이 많은 함수가 존재한다.
간단하게 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에 맞춰서 생각하는 버릇을 들여야 정반대로 작동하는 함수를 만들지 않는다!
'Back' 카테고리의 다른 글
이클립스 기본세팅 완벽하게 정리해보기 (1) | 2023.04.22 |
---|