이번 문서의 목표: 시험 지문·보기·컴파일러 에러 메시지에 반복해서 나오는 영문 키워드의 뜻과 발음을 정확히 알아, 영어 표현 때문에 시간을 낭비하지 않고 문제의 핵심을 바로 파악할 수 있다.
왜 영문 용어를 따로 정리하는가
왜 필요한가
독학사는 한국어로 출제되는 시험이지만, C언어 자체가 영어 키워드로 이루어진 언어이기 때문에 문제 지문과 보기 안에 영문 용어가 그대로 섞여 나온다. “선언(declaration)과 정의(definition)의 차이”, “call by value와 call by reference의 차이” 같은 문항은 한국어 번역만 외워서는 정확히 구분하기 어렵다. 번역 과정에서 미묘한 뉘앙스가 사라지기 때문이다. 또한 컴파일러가 실제로 내뱉는 에러 메시지(예: undeclared identifier, segmentation fault)를 읽을 줄 알아야, 21편에서 다룬 오류 찾기형 문제에서 지문에 제시된 에러 메시지만 보고도 원인을 짐작할 수 있다.
쉽게 말하면: C 문법 용어의 한국어 번역은 “그림자”이고 영문 원어는 “실체”다. 실체를 알아야 그림자만 보고도 헷갈리지 않는다.
이 편에서 다루는 범위
이 편은 03편(자료형·연산자·키워드), 04편(표준 입출력 용어), 05편(메모리 모델)에서 이미 다룬 용어를 표로 재정리하며 반복 병기하고, 여기에 시험 지문에서 실제로 자주 쓰이는 표현 패턴과 에러 메시지, 영문 지문을 읽는 절차까지 더해 시험 직전 최종 점검용으로 구성한다. 각 용어는 다른 편에서 이미 깊게 설명했으므로, 여기서는 뜻을 다시 짚고 그 편 번호를 표기한다.
문법 관련 영문 키워드
자료형·선언 관련
| 영문 | 발음 | 뜻 | 참고 편 |
|---|---|---|---|
| declaration | 디클러레이션 | 선언 — 변수·함수의 이름과 자료형만 컴파일러에 알리는 것 | 06 |
| definition | 데피니션 | 정의 — 변수에 실제 메모리를 할당하거나 함수의 본문을 작성하는 것 | 06 |
| identifier | 아이덴티파이어 | 식별자 — 변수·함수·타입에 붙이는 이름 | 02 |
| initialization | 이니셜라이제이션 | 초기화 — 변수를 선언과 동시에 값으로 채우는 것 | 07 |
| implicit conversion | 임플리싯 컨버전 | 암묵적 형 변환 — 컴파일러가 자동으로 자료형을 바꿔주는 것 | 07, 21 |
| explicit conversion (cast) | 익스플리싯 컨버전(캐스트) | 명시적 형 변환 — 프로그래머가 직접 (자료형)으로 지정하는 형 변환 | 07 |
| signed / unsigned | 사인드 / 언사인드 | 부호 있음 / 부호 없음 — 음수를 표현하는지 여부 | 03, 07 |
| literal | 리터럴 | 리터럴 — 코드에 직접 쓰는 값 자체(예: 10, 'A', "hi") | 03 |
설명 하나를 골라 자세히 보자. declaration(선언)과 definition(정의)은 한국어로는 둘 다 “정한다”는 느낌이라 헷갈리기 쉽지만, C에서는 명확히 다르다. int x;는 선언이자 동시에 정의(메모리도 실제로 확보됨)이지만, 함수의 경우 int add(int a, int b);는 선언(프로토타입, 함수의 존재만 알림)이고 int add(int a, int b) { return a + b; }처럼 몸체가 있는 것은 정의다. 10편에서 다룬 함수 프로토타입이 바로 이 “선언과 정의의 분리”를 이용하는 예다.
연산자·표현식 관련
| 영문 | 발음 | 뜻 | 참고 편 |
|---|---|---|---|
| assignment operator | 어사인먼트 오퍼레이터 | 대입 연산자, = | 03, 08 |
| comparison(relational) operator | 컴패리즌(릴레이셔널) 오퍼레이터 | 비교(관계) 연산자, ==·!=·> 등 | 08 |
| logical operator | 로지컬 오퍼레이터 | 논리 연산자, &&·||·! | 08 |
| operator precedence | 오퍼레이터 프리시던스 | 연산자 우선순위 — 어떤 연산을 먼저 계산할지 정하는 규칙 | 08 |
| associativity | 어소시어티비티 | 결합 규칙 — 우선순위가 같은 연산자를 왼쪽부터 계산할지 오른쪽부터 계산할지 | 08 |
| increment / decrement | 인크리먼트 / 디크리먼트 | 증가 / 감소, ++·-- | 08 |
| expression / statement | 익스프레션 / 스테이트먼트 | 식(값으로 평가되는 코드 조각) / 문(세미콜론으로 끝나는 하나의 실행 단위) | 02 |
제어문·함수 관련
| 영문 | 발음 | 뜻 | 참고 편 |
|---|---|---|---|
| condition | 컨디션 | 조건 — if·while 등에서 참·거짓을 판단하는 식 | 09 |
| iteration / loop | 이터레이션 / 루프 | 반복 — for·while·do-while로 같은 코드를 되풀이하는 것 | 09 |
| infinite loop | 인피니트 루프 | 무한 루프 — 종료 조건이 참이 되지 않아 영원히 반복되는 루프 | 09, 21 |
| function prototype | 펑션 프로토타입 | 함수 프로토타입 — 함수의 몸체 없이 반환형·이름·매개변수만 미리 알리는 선언문 | 10 |
| parameter / argument | 패러미터 / 아규먼트 | 매개변수(함수 정의에서 받는 변수) / 인자(함수 호출 시 실제로 넘기는 값) | 10 |
| call by value / call by reference | 콜 바이 밸류 / 콜 바이 레퍼런스 | 값에 의한 전달(값을 복사) / 참조에 의한 전달(주소를 넘겨 원본 접근) | 10, 13, 21 |
| return value | 리턴 밸류 | 반환값 — 함수가 호출한 곳으로 돌려주는 값 | 10 |
| scope | 스코프 | 범위 — 변수·함수 이름이 유효하게 인식되는 코드 영역 | 10 |
| recursion | 리커전 | 재귀 — 함수가 자기 자신을 다시 호출하는 것 | 10 |
자주 틀리는 점: parameter(매개변수)와 argument(인자)를 뒤바꿔 서술한 보기가 시험에 종종 나온다. 함수를 정의할 때 괄호 안에 적는 변수 이름이 매개변수이고, 함수를 호출할 때 그 자리에 실제로 넘기는 값이 인자다. 예를 들어 int add(int a, int b)의 a, b는 매개변수, add(3, 5)의 3, 5는 인자다.
메모리·포인터 관련 영문 키워드
| 영문 | 발음 | 뜻 | 참고 편 |
|---|---|---|---|
| pointer | 포인터 | 포인터 — 다른 변수의 메모리 주소를 저장하는 변수 | 05, 12 |
| dereference | 디레퍼런스 | 역참조 — 포인터가 가리키는 위치의 값을 읽거나 쓰는 연산(*) | 12 |
| address-of operator | 어드레스-오브 오퍼레이터 | 주소 연산자, & — 변수의 메모리 주소를 구하는 연산자 | 12 |
| stack | 스택 | 스택 — 함수 호출·지역 변수가 저장되는, 후입선출 구조로 자동 관리되는 메모리 영역 | 05, 10 |
| heap | 힙 | 힙 — malloc 등으로 프로그래머가 직접 요청·반납해야 하는 메모리 영역 | 05, 17 |
| stack frame | 스택 프레임 | 스택 프레임 — 함수가 호출될 때 스택에 쌓이는, 그 함수의 매개변수·지역 변수·복귀 주소를 담는 블록 | 10 |
| dynamic memory allocation | 다이내믹 메모리 얼로케이션 | 동적 메모리 할당 — 프로그램 실행 중에 필요한 만큼 힙 메모리를 요청하는 것 | 17 |
| memory leak | 메모리 리크 | 메모리 누수 — free하지 않아 계속 점유되는 힙 메모리 | 17, 21 |
| dangling pointer | 댕글링 포인터 | 댕글링(매달린) 포인터 — 이미 해제된 메모리를 여전히 가리키는 포인터 | 17, 21 |
| null pointer | 널 포인터 | 널 포인터 — 아무 것도 가리키지 않음을 뜻하는, 값이 0인 포인터 | 12, 21 |
| segmentation fault | 세그멘테이션 폴트 | 세그멘테이션 오류 — 허용되지 않은 메모리 영역에 접근해 운영체제가 프로그램을 강제 종료시키는 런타임 오류 | 21 |
표준 라이브러리 함수 이름과 에러 메시지 표현
자주 나오는 표준 라이브러리 함수 이름의 어원
| 함수 이름 | 어원 풀이 | 뜻 | 참고 편 |
|---|---|---|---|
printf | print formatted(포맷을 지정해 출력한다) | 형식 문자열에 맞춰 화면에 출력하는 함수 | 04 |
scanf | scan formatted(포맷을 지정해 읽어들인다) | 형식 문자열에 맞춰 입력을 읽어들이는 함수 | 04 |
strlen | string length(문자열 길이) | 문자열의 길이(널 문자 제외)를 구하는 함수 | 19 |
strcpy | string copy(문자열 복사) | 한 문자열을 다른 배열에 복사하는 함수 | 19 |
strcmp | string compare(문자열 비교) | 두 문자열을 사전 순으로 비교하는 함수 | 19 |
malloc | memory allocation(메모리 할당) | 힙에서 지정한 바이트 수만큼 메모리를 확보하는 함수 | 17 |
calloc | contiguous allocation(연속된 메모리 할당) | 메모리를 확보하면서 그 내용을 0으로 초기화까지 해주는 함수 | 17 |
realloc | re-allocation(재할당) | 이미 할당된 메모리의 크기를 조정하는 함수 | 17 |
fopen | file open(파일 열기) | 파일을 열어 이후 입출력에 쓸 FILE 포인터를 얻는 함수 | 16 |
sizeof | size of(…의 크기) | 자료형이나 변수가 차지하는 바이트 수를 구하는 연산자 | 07 |
단, “구조체”, “함수” 같은 일반 한자어에는 억지 어원 풀이를 붙이지 않는다. 이 표는 영문 함수 이름 자체가 축약어라서 어원을 알면 기억하기 쉬운 경우만 골랐다.
컴파일러·런타임 에러 메시지에서 자주 보는 표현
| 영문 표현 | 뜻 | 어떤 상황에서 나오는가 |
|---|---|---|
undeclared identifier | 선언되지 않은 식별자 | 선언 없이 변수·함수를 사용했을 때(21편의 컴파일 오류 예시) |
expected ';' before ... | 세미콜론이 있어야 할 자리에 없음 | 문장 끝에 세미콜론을 빠뜨렸을 때 |
implicit declaration of function | 함수의 암묵적 선언 | 프로토타입 없이 함수를 먼저 호출했을 때(경고 또는 오류) |
segmentation fault (core dumped) | 세그멘테이션 오류(코어 덤프됨) | 잘못된 메모리 주소에 접근했을 때 |
division by zero | 0으로 나누기 | 정수를 0으로 나누는 연산을 실행했을 때 |
warning: unused variable | 사용하지 않는 변수 경고 | 선언만 하고 한 번도 쓰지 않은 변수가 있을 때(오류는 아니고 경고) |
자주 틀리는 점: warning(경고)과 error(오류)를 같은 것으로 착각하면 안 된다. warning은 컴파일이 끝까지 진행되어 실행 파일이 만들어지는 상태이고, error는 컴파일이 중단되어 실행 파일이 만들어지지 않는 상태다. 시험 지문에 “컴파일 warning이 발생했다”고만 나오면, 실행 파일은 정상적으로 만들어졌다는 뜻이다.
영문 지문 읽는 전략
왜 필요한가
독학사 시험 지문은 한국어 위주지만, 코드 안의 주석이나 변수 이름, 문제 자체가 인용한 컴파일러 메시지는 영어 그대로 나올 수 있다. 이때 문장을 처음부터 끝까지 사전 찾듯이 정독하면 시간이 부족해진다. 아래 절차로 필요한 정보만 빠르게 뽑아내는 습관을 들인다.
- 핵심 키워드부터 찾는다. 지문에서
error,warning, 함수 이름, 자료형 이름처럼 이 편의 표에 있는 단어를 먼저 눈에 띄는 대로 표시한다. - 에러 메시지는 위치 정보와 분리해서 읽는다.
line 5: expected ';'처럼 나오면 “5번째 줄에 세미콜론이 빠졌다”는 위치+원인 구조로 재구성한다. - 코드와 지문을 번갈아 대조한다. 지문이 가리키는 줄 번호나 변수 이름을 실제 코드에서 찾아 짚어가며 읽는다.
- 모르는 단어는 문맥으로 추측하고 넘어간다. 시험 중 사전을 볼 수 없으므로, 이 편의 표에 없는 생소한 단어가 나오면 주변 문맥(코드가 하는 일, 나머지 보기)으로 뜻을 추정하고 넘어간다.
쉽게 말하면: 영문 지문을 통째로 번역하려 하지 말고, “이 편의 용어 표에 있는 단어들”만 빠르게 걸러내 읽으면 시간을 크게 아낄 수 있다.
핵심 정리
- declaration(선언)과 definition(정의)은 다르다 — 함수는 프로토타입(선언)과 몸체가 있는 정의를 구분해서 봐야 한다.
- parameter(매개변수)는 함수 정의에서 받는 변수, argument(인자)는 함수 호출 시 실제로 넘기는 값이다.
- stack(스택)은 자동 관리되는 지역 변수·함수 호출 영역, heap(힙)은 malloc 등으로 직접 관리하는 영역이다.
- warning(경고)은 컴파일이 끝까지 진행되어 실행 파일이 만들어지지만, error(오류)는 컴파일 자체가 중단된다.
- 영문 지문은 처음부터 정독하지 말고, 핵심 키워드와 에러 메시지의 위치+원인 구조부터 빠르게 뽑아 읽는다.