나의 C23 코딩 관례

2 hours ago 2

사용자 규모가 있는 C 프로젝트를 유지보수하며 실수를 줄이기 위해, Zig 빌드에 -std=c23 을 추가한 뒤 정착한 세 가지 코딩 관례를 공유함 [[nodiscard]] 로 반환값 확인을 요구하되, 의도적으로 사용하지 않는 경우에는 UNUSED() 매크로 대신 [[maybe_unused]] 를 사용함 반환형이 다양한 함수에 같은 패턴을 적용하기 위해 [[maybe_unused]] auto _ = foo(); 형태로 반환값을 받음 공용체가 포함된 구조체를 완전히 0으로 초기화하려면 C23의 빈 초기화 {} 를 사용해야 하며, {0}은 C23에서도 이전과 동일하게 동작함 열거형이 상수 값에 맞춰 정수 타입을 조정하는 뜻밖의 동작을 피하기 위해 enum options: int 처럼 기반 정수 타입을 명시함 현대 C로 전환한 이유 2026년 말의 C 사용 방식을 다루는 3부작 중 첫 번째 글로, Zig 빌드에 -std=c23을 추가하면서 자연스럽게 자리 잡은 관례 세 가지를 다룸 오랫동안 How I Program C의 영향을 받아 -ansi -pedantic 대신 C99를 선택하는 것조차 꺼렸지만, 이제는 충분한 사용자 규모를 가진 프로젝트를 유지보수하면서 실수할 여지를 줄이는 것이 중요해짐 반환값을 확인하되, 의도적인 미사용은 명시하기 창이나 패널을 그리는 draw_screen() 은 렌더링한 영역의 rect_t를 반환하며, 호출자가 후속 처리를 위해 이 값을 확보하도록 [[nodiscard]] 를 붙임 반환된 사각형을 확보하지 않는 것은 실제 비즈니스 로직 버그이므로, 이 속성이 버그 수정에 도움이 됨 다만 일부 호출에서는 화면을 그리기만 하면 되고 반환된 사각형은 필요하지 않음 사용 중인 Clang과 -Werror 설정에서는 반환값을 무시하면 오류가 나고, 지역 변수에 저장만 해도 미사용 변수 오류가 남 C23 이전에는 UNUSED(x)를 (void)(x)로 정의해 변수를 사용한 것으로 처리함 C23에서는 [[maybe_unused]] rect_t rect = draw_screen(...);으로 의도를 표시하고 매크로를 제거함 여러 반환형에 같은 방식을 적용하면서 [[maybe_unused]] auto _ = foo(); 패턴을 사용하게 됨 개발자 Zardium은 고유 변수명을 생성하는 _ 매크로를 대안으로 제안함 [[maybe_unused]], auto, 이름 결합 매크로와 카운터를 조합하는 방식임 auto...

Read Entire Article