바쁘다는 핑계로 블로그를 소홀히 하고 있었는데 친구한테 걸렸다.
초심 잃었다는 말에 조그만한 내용이나마 작성하고자 한다.
오늘 할 것은 isalpha 함수 구현하기이다!
우선 isalpha 함수란 다음과 같다!

터미널에 man isalpha를 입력하면 isalpha에 대한 공식 문서를 확인할 수 있다.
매뉴얼 페이지는 Unix 계열 운영 체제(예: macOS, Linux, BSD)에서 제공하는 시스템 명령어 또는 함수에 대한 공식 문서이다.
#include <ctype.h>
int isalpha(int c);
isalpha() 함수는 입력된 문자가 알파벳 문자(대문자 또는 소문자)인지를 검사한다.unsigned char로 표현할 수 있는 값이거나 EOF여야 한다.여기서 의문이 들 것이다.
분명 문자가 alphabet인지를 확인하는데 왜 인수로 int 형을 받는가??
문자 확장: 표준 ASCII 문자 집합은 0 ~ 127 값으로 표현되지만 확장된 ASCII나 다른 문자 인코딩을 지원하기 위해 unsigned char 로 표현할 수 있는 값을 포함해야 한다. 이러한 값을 포함하기 위해 int형을 받는다.
호환성 : 문자 처리 함수들은 EOF를 처리하는 것이 일반적이다. EOF는 정수형 값으로 정의되고 일반적으로 -1이다. char 대신 int 형을 받음으로써 이 값을 처리할 수 있다.
다시 말해 unsigned char도 받아야 하고 -1도 받아야 하니까 인수를 int형으로 받는 것이다!
int ft_isalpha(int c)
{
return (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'));
}
c 언어에서 논리값은 0(false)와 0이 아닌 값(true)로 표현이 된다.
많은 라이브러리 함수들이 단순히 논리 값을 반환하는데 이는 코드의 간결성과 효율성을 위해 1을 사용하여 구현하는 경우가 많다.
위의 구현에서도 보았듯이 위의 조건식이 참이면 1을 반환, 거짓이면 0을 반환하다. 그렇기에 표준에서는 조건이 참이면 0이 아닌 값을 반환한다고 하지만 일반적으로 조건이 참이면 1을 반환하는 경우가 많다.
참고로 c언어에서 비교할 때는 코드의 가독성, 오류 방지, 관습 등의 이유로 일반적으로 변수를 왼쪽에 두고 상수나 조건식을 오른쪽에 둔다.
위의 코드는
int ft_isalpha(int c)
{
return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
}
이렇게 작성하는 것이 더 이상적이라는 것.
다만 ==을 =으로 실수하여if (c = 'A') 이런 식으로 작성하면 의도치 않은 할당 연산이 발생한다.
이를 방지하기 위해 if ('A' == c) 이런 식으로 상수를 왼쪽에 두고 변수를 오른쪽에 두는 이 방식을 야다바스 조건이라고 한다.
그러면 실수로 if ('A' = c) 이런 식으로 작성했을 때 컴파일 오류 발생으로 오류를 방지하기 쉽다.