Proven C Book←↑→

부록 G — C23이 보탠 것과 이 책에서의 자리

표준은 판마다 「무엇이 달라졌나」를 스스로 적어 둔다(C23 의 부속서 M.2). 그 목록을 기준으로, 이 책이 각 항목을 어디에서 다루는지를 모았다. 새 표준을 이미 아는 사람이 「그 이야기는 어느 장에 있나」를 찾는 자리이고, 반대로 다 읽은 사람이 「C23 을 빠짐없이 만났나」를 확인하는 자리이기도 하다.

★ 이 책은 C23 을 따로 가르치지 않는다. 옛 방식을 먼저 가르치고 새 방식을 덧붙이는 대신, 처음부터 C23 으로 설명하고 필요할 때만 「예전에는 이랬다」를 덧붙였다. 그래서 아래 항목들은 한자리에 모여 있지 않고 각자의 주제 속에 흩어져 있다. 이 표가 그 흩어진 자리를 잇는다.

언어#

무엇요지어디서
bool·true·false 등 키워드 승격매크로였던 것이 낱말이 됐다87장
nullptr 과 nullptr_t널을 위한 제 타입 있는 상수37·87장
constexpr번역 시간에 값이 고정되는 객체21·87장
typeof·typeof_unqual식의 타입을 그대로 받아 적는다87장
auto 타입 추론초기식에서 타입을 끌어낸다87장
속성 [[…]]타입이 담지 못하는 뜻을 적는다(일곱)87장
_BitInt(N)폭을 내가 정하는 정수21·28장
두 보수 확정·옛 부호 표현 제거정수 표현이 하나로 못박혔다6·28장
정수 한계의 폭 기반 재정의보장 범위의 음수 쪽 끝이 바뀌었다28장
이진 리터럴 0b비트를 비트로 적는다21·51장
자릿수 구분자 '1'000'000 처럼 끊어 읽는다21장
빈 초기자 {}패딩까지 0 으로 채우는 초기화47장
복합 리터럴의 저장 클래스수명을 바꿔 쓸 수 있다48장
열거체의 기반 타입 지정enum E : unsigned { … }27장
태그 호환 규칙 완화같은 번역 단위 안에서도 호환된다47장
라벨 위치 확장선언 앞과 블록 끝에도 붙는다32장
K&R 식별자 목록 정의 제거옛 함수 정의 문법이 사라졌다62장
f() = f(void)빈 괄호가 「인자 없음」으로 못박혔다62장
매개변수 이름 생략 허용정의에서도 이름을 뺄 수 있다62장
va_start 의 둘째 인자 불필요... 앞의 매개변수가 없어도 된다63장
가변 수정 타입 필수화VLA(variable length array) 자체는 여전히 선택40장
유니코드 식별자이름에 쓸 수 있는 글자가 정해졌다8장
@·$·역따옴표(U+0060)를 문자 집합에 추가소스에 쓸 수 있는 글자가 늘었다8장
u8 문자 상수문자열에만 있던 접두사가 문자에도21장
u8·u·U 인코딩 못박음UTF-8·16·32 로 확정8·75장
리터럴 인코딩 분리실행 문자 집합과 리터럴 인코딩을 갈랐다8장
넓은·좁은 리터럴 이어붙이기 제거섞어 붙이는 것이 사라졌다43장
잠재적으로 예약된 이름예약과 비예약 사이에 눈금 하나59장
ptrdiff_t 최소 폭 1617 이었던 요구가 낮아졌다27장
확장 정수 타입의 폭 예외int128_t 같은 것을 허용한다28장

표 105.1 — C23 이 언어에 보탠 것

전처리기#

무엇요지어디서
#embed이진 자료를 소스에 그대로 들인다61장
__VA_OPT__가변 인자가 비었을 때를 다룬다61장
__has_include헤더가 있는지 물어본다51·86장
#elifdef·#elifndef#elif defined 의 짧은 꼴61장
#warning오류 없이 알린다61장
한 인자 static_assert메시지를 생략할 수 있다80장

표 105.2 — C23 이 전처리기에 보탠 것

라이브러리#

무엇요지어디서
<stdbit.h>비트 세기·회전이 표준 함수가 됐다51·83장
<stdckdint.h>넘침을 값으로 알려 주는 산술54·86장
unreachable「여기 오지 않는다」를 약속한다54장
memset_explicit지우기가 최적화로 사라지지 않는다70장
memalignment포인터의 정렬을 묻는다67장
한정자 보존 검색 함수const 를 넣으면 const 가 나온다70장
free_sized·free_aligned_sized아는 크기를 할당자에게 알려 준다89장
realloc(p, 0) 은 UB(undefined behavior)예전의 회색지대가 계약 밖이 됐다46장
시간 기준 여럿·timespec_getres단조 시계와 눈금 묻기79장
timegmmktime 의 UTC 판79장
mbrtoc8·c8rtomb<uchar.h> 의 빠져 있던 UTF-8 짝75장
call_once 필수화선택이 아니게 됐다84장
POSIX 함수 편입(strdup 등)관행이던 것이 표준이 됐다69–70장
intN_t 서식 길이 지정자printf·scanf 가 고정 폭 타입을 안다66장
이진 정수 입출력 %b0b 를 찍고 읽는다51장
헤더별 판 시험 매크로무엇이 있는지 헤더가 스스로 밝힌다19장
DECIMAL_DIG 폐기 예정타입별 매크로가 대신한다28장
_Imaginary_I 한정자 손질선택 헤더의 작은 수선83장
IEC 60559 조화부동소수점 규격을 더 정확히 따른다52장
유효 타입 규칙 정밀화앨리어싱의 근거가 또렷해졌다40장

표 105.3 — C23 이 라이브러리에 보탠 것

이 표를 쓰는 법#