8.1.4 경계값 검사 인터페이스
C 라이브러리에서 제공하는 함수 중에서 상당수는 매개변수 사이에 일관성이 없으면 버퍼 오버플로(buffer overflow)C가 발생하기 쉽다. 그러면 보안과 관련된 버그가 발생하여 이를 악용한 공격에 취약해지기 때문에 신중하게 처리해야 한다.
C11에서는 이런 문제에 대응하기 위해 몇몇 함수를 표준에서 폐기하거나 삭제하고, 매개변수의 일관성을 런타임에 검사할 수 있는 새로운 인터페이스를 옵션으로 제공했다. 이는 C 표준의 부록 K에 나온 경계값 검사 인터페이스(bounds-checking interface)에 정리돼 있다. 다른 기능과 달리 헤더 파일이 따로 있지 않고 다른 곳에 인터페이스만 추가되어 있다. 이 인터페이스에 대한 접근을 제어하는 매크로는 두 가지다. __STDC_LIB_EXT1__은 이 인터페이스가 지원되는지 알려 주고, __STDC_WANT_LIB_EXT1__은 이 인터페이스를 사용하도록 설정한다. 후자는 반드시 인클루드 전에 헤더 파일을 적어야 한다.
#if !__STDC_LIB_EXT1__ # error "이 코드는 부록 K의 경계값 검사 인터페이스를 사용해야 한다." #endif #define __STDC_WANT_LIB_EXT1__ 1 #include <stdio.h> /* 여기서부터는 printf_s를 사용한다. */