# C 언어가 해야 할 명백한 사항들

> Clean Markdown view of GeekNews topic #18700. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18700](https://news.hada.io/topic?id=18700)
- GeekNews Markdown: [https://news.hada.io/topic/18700.md](https://news.hada.io/topic/18700.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-13T08:34:22+09:00
- Updated: 2025-01-13T08:34:22+09:00
- Original source: [digitalmars.com](https://www.digitalmars.com/articles/Cobvious.html)
- Points: 2
- Comments: 1

## Topic Body

- # C의 명백한 개선점

  - **C23 표준**: C 언어는 정기적으로 개선되며 현재 C23에 이르렀음. 그러나 여전히 해결되지 않은 문제들이 존재함.
  - **Dlang 커뮤니티의 노력**: D 프로그래밍 언어 컴파일러에 C 컴파일러(ImportC)를 내장하여 이러한 문제를 해결할 기회를 제공함.

- # 상수 표현식 평가

  - **문제점**: C는 컴파일 시간에 간단한 표현식을 계산할 수 있지만, 함수 실행은 불가능함.
  - **ImportC의 해결책**: ImportC는 컴파일 시간에 함수 실행을 허용하여 이러한 제한을 극복함.

- # 컴파일 시간 단위 테스트

  - **C에서의 문제점**: C 코드에서 단위 테스트는 별도의 빌드 대상이 필요하여 번거로움.
  - **ImportC의 장점**: ImportC는 컴파일 시간에 함수 평가를 통해 단위 테스트를 쉽게 실행 가능하게 함.

- # 선언의 전방 참조

  - **C의 제한**: C는 선언의 순서에 민감하여 전방 참조를 허용하지 않음.
  - **ImportC의 장점**: ImportC는 선언의 순서에 구애받지 않으며, 임의의 순서로 전역 선언을 허용함.

- # 선언 가져오기

  - **기존 방식의 문제점**: 외부 모듈마다 .h 파일을 작성해야 하는 번거로움이 존재함.
  - **ImportC의 해결책**: ImportC는 .h 파일 없이도 선언을 가져올 수 있어 효율적임.

- # 참고 자료

  - **ImportC 문서**: ImportC에 대한 자세한 정보 제공.
  - **D 언어 문서**: D 언어에 대한 추가 정보 제공.

## Comments



### Comment 33321

- Author: neo
- Created: 2025-01-13T08:34:22+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42669637) 
- C 언어의 헤더 파일은 공용과 비공용, 인터페이스와 구현을 명확히 구분할 수 있어 좋음. .h 파일을 통해 라이브러리 사용법을 쉽게 알 수 있음
  - .h 파일에 문서화가 집중되어 있어 .c 파일과는 다르게 보임
  - 문서를 .c 파일에 넣을 수도 있지만, 인터페이스를 읽기 불편하게 만듦

- C 언어에서 컴파일 타임에 함수 실행이 가능해야 한다는 의견이 있지만, 실행 시간이 긴 함수는 문제가 될 수 있음
  - 예시로 `busybeaver` 함수가 있음

- 상수 표현식 평가, 컴파일 타임 유닛 테스트, 선언의 전방 참조, 선언 가져오기 등의 문제에 대한 해결책이 궁금함
  - 상수 표현식 평가: 번역 단위 내에서 작업하면 간단하지만 코드 반복이 필요함
  - 컴파일 타임 유닛 테스트: 매크로로 표현하면 가능하지만, 첫 번째 포인트를 추가하면 쉬워짐
  - 선언의 전방 참조: 컴파일러가 두 번의 패스를 필요로 하게 되어 성능에 영향을 미칠 수 있음
  - 선언 가져오기: C에서 템플릿을 구현하는 방법이 깨질 수 있음

- C 코드에 대한 유닛 테스트 작성은 좋은 빌드 시스템과 약간의 보일러플레이트로 가능함
  - 예시로 `npy` 라이브러리의 테스트 코드가 있음

- 상수 표현식 평가가 복잡한 경우 컴파일러 속도가 저하될 수 있으며, VM이 필요할 수 있음
  - C++20의 정의보다 모듈을 심볼로 가져오는 방향이 더 좋았을 것이라는 의견

- 컴파일 타임 유닛 테스트는 개발자의 통제를 빼앗고, 작업을 완료하기 위한 불필요한 절차를 요구함
  - 빌드 실패 테스트는 최종 빌드에는 좋지만, 중간 빌드에는 적합하지 않음

- 함수 정의를 "하향식"으로 하는 것이 더 나은지에 대한 논의
  - Python과 같은 언어에서도 하향식 정의가 일반적임
  - 하향식 정의가 특정 코드 유형에 더 적합한지 여부에 대한 질문

- C 언어에서 추가되었으면 하는 기능들
  - 포인터와 길이를 인코딩하는 슬라이스 타입 지원
  - 재진입 가능하고 스레드 안전한 API
  - Go와 Zig의 `defer`와 같은 기능 표준화
  - 유니코드와 UTF-8에 대한 휴대용 지원

- C의 간단한 구현이 장점이며, 범위를 크게 확장하는 것은 좋은 아이디어가 아님
  - Scheme처럼 "작은" 버전과 "큰" 버전의 사양을 가질 수 있음

- 함수 정의를 위에서 아래로 하는 것이 더 나은 이유
  - 함수 내에서 코드를 작성하는 방식과 유사함
  - 모듈 내에서 함수 위치가 명확함
  - 순환 종속성을 명확히 파악할 수 있음
  - 순환 종속성은 코드베이스를 복잡하게 만들고 모듈을 이해하기 어렵게 함
  - OCaml은 함수 간의 순환 종속성을 허용하지 않음
