개요
레거시 시스템 유지보수와 임베디드 환경에서는 여전히 ANSI C(C89) 표준 컴파일러가 중요하게 활용됩니다. 이 글에서는 Ubuntu 환경에서 c89-gcc 명령어를 활용한 기본 컴파일 패턴부터 엄격한 표준 검사 옵션, 자주 발생하는 오류 해결법까지 실무 핵심 내용을 살펴봅니다.
c89-gcc 개발 환경 구성 및 기본 컴파일 패턴
C89 컴파일 환경을 구성하기 위해 시스템 패키지 목록을 갱신하고 gcc 패키지를 설치합니다.

C89 표준 컴파일을 검증하기 위한 기본 소스 코드 파일인 hello_c89.c를 생성합니다.

c89-gcc 명령어는 C89(ANSI C) 표준 규격을 엄격하게 준수하여 C 소스 코드를 컴파일합니다.
⚙️ [주요 옵션]
-o : 출력할 실행 파일의 이름을 지정합니다.-Wall : 코드 검사 시 발생 가능한 표준 경고 메시지를 모두 활성화합니다.-pedantic : C89 표준을 엄격히 적용하여 표준에 위배되는 비표준 문법에 대해 경고를 출력합니다.-pedantic-errors : 표준 규격 위반 경고를 단순 경고가 아닌 컴파일 오류로 처리합니다.-O2 : 코드 실행 성능을 높이기 위해 컴파일러 최적화를 적용합니다.

빌드가 완료된 hello_c89 바이너리를 실행하여 프로그램이 정상적으로 동작하는지 확인합니다.

엄격한 표준 검사와 경고 플래그(-pedantic, -Wall) 활용
엄격한 C89 표준 검사와 경고 플래그 동작을 검증하기 위한 소스 코드 파일 strict_test.c를 생성합니다.

-pedantic, -Wall, -Wextra 옵션을 적용하여 비표준 문법 사용과 잠재적인 코드 결함을 엄격하게 검사하며 컴파일을 진행합니다.
C89 규격을 준수한 코드이므로 경고 메시지 없이 실행 파일 strict_test가 정상적으로 생성됩니다.

빌드된 strict_test 실행 파일을 실행하여 표준 검사를 통과한 바이너리가 정상적으로 동작하는지 확인합니다.

외부 라이브러리 링크 및 최적화 빌드 패턴
수학 라이브러리 연산과 최적화 빌드 동작을 검증하기 위한 C 소스 코드 파일 math_demo.c를 생성합니다.

-O2 최적화 옵션과 수학 라이브러리를 연결하는 -lm 플래그를 함께 지정하여 math_demo.c 소스 코드를 컴파일합니다.
외부 라이브러리 링크와 코드 최적화가 올바르게 적용되어 실행 파일 math_demo가 정상적으로 빌드됩니다.

생성된 math_demo 바이너리를 실행하여 수학 라이브러리 함수가 정상적으로 동작하고 연산 결과가 출력되는지 확인합니다.

C89 실무에서 자주 겪는 문법 제약과 컴파일 주의점
C89 표준의 변수 선언 위치 규칙을 검증하기 위한 C 소스 코드 파일 decl_rule.c를 생성합니다.

-pedantic-errors 옵션을 적용하여 표준 규격을 엄격히 검사하면서 decl_rule.c 소스 코드를 오브젝트 파일 decl_rule.o로 컴파일합니다.
블록 시작 부분에 변수를 선언하는 C89 문법 규격을 올바르게 준수하여 오류 없이 컴파일이 완료됩니다.

컴파일된 decl_rule.o 오브젝트 파일을 링크하여 최종 실행 파일 decl_rule을 생성합니다.
링크 과정이 정상적으로 완료되어 실행 바이너리가 성공적으로 빌드됩니다.

빌드된 decl_rule 바이너리를 실행하여 프로그램이 의도한 대로 정상 동작하고 결과가 출력되는지 확인합니다.

지금까지 우분투 환경에서 c89-gcc를 활용한 C89 표준 컴파일 방법과 실무 적용 시 주의해야 할 점들을 간단하게 살펴보았습니다.
레거시 코드 유지보수나 엄격한 표준 호환성이 필요한 프로젝트에서 이번 가이드가 유용한 참고가 되기를 바랍니다.