🏷️확장 (Extension)
- C 표준에서 제공하는 것만으로는 현란한 화면을 제공하는 프로그램이나 주변 장치를 제어하는 프로그램을 만들 수 없다.
- 프로그래머가 더 편하게 C 프로그램을 작성할 수 있는 방법이 존재함에도 표준이 반영하지 못하여 임플리멘테이션이 이를 지원하지 못한다면 C 표준의 병폐가 될 수 있다.
- 위의 문제를 해결하기 위해 나온 것이 확장(extension)이다.
📌표준은 확장들을 굳이 막지 않는다.
- C프로그램이 다양한 분야에서 다양한 목적으로 작성될 수 있기 위함이다.
- 프로그래머의 편의를 돕기 위함이다.
📌표준의 단점
- 표준이 제공하는 라이브러리는 좋게 이야기하면 필수적인 것들이고 나쁘게 얘기하면 너무 빈곤하다.
- 대부분의 임플리멘테이션은 표준 라이브러리에 덧붙여 해당 환경에서 여러가지 응용 작업을 수행할 수 있도록 추가적인 라이브러리를 제공한다.
- 🔍ex) 표준 라이브러리에는 디렉터리 개념이 없는데 디렉터리 탐색 등의 행동을 추가적인 라이브러리 서비스로 제공한다.
- 명확하게 정의하지 않은 표준에 의존해야 하는 경우도 있다.
- 🔍ex) C는 부동소수점의 내부 표현에 대해 자세하게 정의하지 않는다.
즉, 부동소수형의 내부 표현에 의존하면 이식성 없는 행동에 의존하는 결과가 된다.
- 그러나 프로그램이 실행될 특정 환경의 부동소수형 내부표현에 의존하여 특별한 조작을 해야 하는 경우가 있다.
📌위의 두가지 문제를 해결하는 바람직한 원칙은 다음과 같다.
- 가능하면 표준 C로 작성된 부분에서 위와 같이 이식성 없는 부분을 격리시킨다.
- 이렇게 하여 다른 환경으로 프로그램을 옮기더라도 이식성 없는 부분을 따로 수정하기 쉽다.
- 🖇️cf. HAL을 도입하는 임베디드 시스템을 생각해볼 수 있다.
- 가능하다면 라이브러리를 선택하거나 이식성 없는 행동에 의존할 때 C표준이 아닌 다른 표준이 지원해 주는 행동에 의존한다.
- C표준에서는 부동소수점수 표현을 자세히 정의하지 않지만 IEEE754라는 국제 표준이 이를 정의해 준다.
- 대부분의 임플리멘테이션은 그 표준을 따르기 때문이다.
- 이왕이면 다른 표준이 정의해주는 것을 따라 프로그램을 작성한다면 이는 다른 환경에서 IEEE754를 지원한다면 그대로 사용할 수 있다.