개념 사전 · 언어
C 언어
C · 씨 언어
C는 자료형·포인터·함수와 명시적인 메모리 사용을 통해 프로그램을 표현하는 언어이다. 일반적인 도구 체인에서는 소스가 ·어셈블·링크를 거쳐 실행 파일이 되며 실행 시 메모리와 외부 자원 수명을 관리해야 한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 운영체제·라이브러리·시스템 프로그램의 저수준 인터페이스를 표현한다.
- 함수와 자료 구조를 소스·헤더·로 나누어 구성한다.
- 정수 폭·포인터·메모리 수명을 고려한 동작을 구현한다.
02어떤 순서로 동작하나
- 전처리
include·매크로·조건부 지시문을 처리하여 컴파일할 소스를 준비한다.
- 컴파일·어셈블
문법·타입을 해석해 기계 코드가 든 을 만든다.
- 링크
다른 과 라이브러리의 심벌 정의를 결합하여 실행 산출물을 만든다.
- 적재·실행
운영체제와 가 필요한 메모리 매핑·동적 연결·초기화를 수행한 뒤 프로그램이 실행된다.
03먼저 알아둘 용어와 구성요소
- 전처리기는 #include에 따라 헤더 내용을 포함하고 매크로와 조건부 컴파일 지시문을 처리한다. 이어 가 구문·타입 등을 분석하고 대상 기계의 코드로 내릴 표현을 만든다. GCC에서 -S는 어셈블리 출력을 남기고, 어셈블러는 이를 기계어와 심볼·재배치 정보가 들어 있는 로 만든다.
- .s는 사람이 읽을 수 있는 어셈블리 텍스트이고, .o/.obj는 보통 바이너리 이다. 에는 아직 외부 함수의 최종 주소를 해결하지 못한 참조가 있을 수 있다. 확장자만 보지 말고 도구·파일 형식·대상 플랫폼까지 확인한다.
- 는 여러 과 라이브러리의 정의·참조를 맞추고 코드와 데이터를 실행 형식에 배치한다. 정적 링크에서는 필요한 라이브러리 코드를 결과물에 포함할 수 있고, 동적 링크에서는 공유 라이브러리에 대한 참조를 남겨 실행 환경에서 연결한다. “컴파일이 됐다”와 “링크가 됐다”는 서로 다른 성공 조건이다.
- 실행을 시작할 때 운영체제는 실행 파일을 확인하고 코드·데이터 등의 주소 공간 매핑을 준비한다. 동적 실행 파일에서는 동적 가 공유 라이브러리를 찾아 매핑하고 필요한 심볼 처리를 수행한다. 언어 런타임 초기화 뒤 사용자 코드에 도달한다. 전체 파일을 RAM에 한꺼번에 복사해야만 실행되는 것은 아니며, 실제 페이지 적재는 운영체제의 정책과 연결된다.
- 다른 파일에 정의된 함수·데이터를 참조하면 에는 심벌과 위치 보정 정보가 남을 수 있다. 링크 시 결합하거나 동적 적재 과정에서 필요한 주소를 연결한다.
- 함수 호출을 이어가기 위한 인수·반환 위치·지역 상태를 관리하는 구현상의 구조이다. C의 자동 저장 기간 객체와 malloc으로 할당한 객체의 수명은 다르며, 지역 변수 주소를 함수 밖에서 계속 사용하는 오류와 구분한다.
04예제로 따라가기
- 함수 선언을 보고 한 소스를 로 만드는 데 성공해도 실제 정의가 링크 입력에 없으면 undefined reference 같은 링크 오류가 날 수 있다.
- 소스의 int와 포인터의 바이트 크기는 언어 이름만으로 하나의 값에 고정하지 않고 구현·대상 ABI 조건을 따른다.
- 이미 빌드된 파일도 대상 CPU·운영체제·동적 라이브러리 조건이 맞지 않으면 적재나 실행 단계에서 실패할 수 있다.
05혼동하기 쉬운 점과 확인 기준
- 파일·행·진단 메시지와 실제 컴파일 옵션을 연결한다. 헤더 경로 문제, 구문·타입 오류를 실행 환경 문제와 섞지 않는다.
- 미정의 심벌이면 필요한 객체·라이브러리 포함과 링크 순서를 본다. 중복 정의이면 같은 구현을 두 번 넣었는지 확인한다.
- 표준 오류·종료 상태·신호·traceback을 보존한다. 호출 경로의 마지막 줄과 원인 지점이 항상 같은 위치인 것은 아니다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
소스 코드에서 실행까지: 컴파일·인터프리터·로더소스 코드가 실행되기까지의 변환 단계와 오류 발생 시점을 구분하고, 컴파일러·인터프리터·로더와 Python 바이트코드 실행을 정리합니다.상세 노트 읽기 →가상 메모리·페이지 변환·Swap과 메모리 부족가상 주소가 실제 메모리에 연결되는 과정과 페이지 폴트·회수·Swap을 구분하고, free·vmstat·OOM 기록으로 메모리 문제를 해석합니다.상세 노트 읽기 →비트·진수·문자 인코딩과 Base64 계산같은 바이트를 숫자·문자·전송 데이터로 해석하는 규칙을 익히고, 진수 변환과 UTF-8·Base64를 단계별로 계산합니다.상세 노트 읽기 →
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.