반응형
C 언어의 정의
- C 언어는 프로그래밍 언어이다.
- 프로그래밍 언어 : 인간과 컴퓨터의 대화에서 사용되는 의사소통 수단
- 컴퓨터는 0과 1로 구성된 기계어만 이해할 수 있고, 인간은 인간의 언어를 사용한다. 이 두 개체 간의 원활한 의사소통을 돕는 수단이 바로 프로그래밍 언어이다.
- 인간이 컴파일러에게 프로그래밍 언어를 사용하여 프로그램을 작성한 파일을 보내면, 컴파일러는 컴퓨터가 이해할 수 있도록 프로그래밍 언어를 기계어로 변환하는 역할을 수행한다.
- 어셈블러는 컴파일러와 컴퓨터 사이에 존재하는데, 컴파일러가 번역한 기계어에 가까운 어셈블리 코드를 기계어(0, 1의 바이너리 코드)로 변환하는 작업을 한다. 즉 2차 번역인 셈이다.
- C 언어와 같이 인간이 이해하기 쉬운 언어(나는 왜 어렵지?)에 가까울수록 고급 언어(high-level language)라 한다.
- 반대로 컴퓨터가 이해하기 쉬울 수록 저급 언어(low-level language)라고 한다.
- 결론적으로 C언어는 고급 언어이지만 하드웨어 제어가 가능하기 때문에 저급 언어의 특성을 지닌 고급 언어라 할 수 있다.
C 언어의 역사 및 특징
- 1972년 미국 벨 연구소의 데니스 리치(Dennis Ritchie)가 개발한 시스템 기술용 언어이다.
- 유닉스(Unix)라는 운영체제 개발에 사용할 목적으로 만들어졌다.
- 유닉스는 어셈블리 언어로 만들어졌기 때문에 하드웨어의 의존도가 높아 컴퓨터 기종에 따라 프로그램을 다시 작성해야 하는 호환성 문제를 가지고 있었다.
- 이를 보완하여 컴퓨터 기종 간의 호환성이 높은 고급(high-level)이면서, 기능 면에서는 어셈블리 언어 못지않게 컴퓨터의 하드웨어를 제어할 수 있는 C 언어가 개발되었다.
- C 언어의 개발 과정
- ALGOL 60
- CPL(Combined Programming Language)
- BCPL(Basic CPL)
- B 언어
- C 언어
- 약간 웃기지만 대학교에서 개발한 CPL과 BCPL을 제외한 나머지 언어 이름들 중에 앞 글자만 보면 A-B-C 순이다.
- C언어의 특징
- 논리적이며 구조적인 시스템 프로그래밍 언어
- 하드웨어 제어가 가능함
- 프로그램 이식성이 높음
- 간략한 문법으로 함축적인 프로그램 작성 용이
- 저급 언어 특성을 가진 고급 언어
반응형
C 프로그램의 작성 및 준비
프로그램 개발 단계
- 위와 같은 개발 단계별로 작업을 수행하는 데는 반드시 요구되는 프로그램은 에디터와 컴파일러이다.
- 에디터 : 워드프로세서와 유사한 형태로 소스 코드(source code)를 보다 쉽게 작성하여 기억장치에 저장할 수 있도록 도와준다.
- 컴파일러 : 에디터를 사용하여 작성한 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 바꾸어 주는 번역 소프트웨어이다.
C 프로그램의 완성 과정
- C 언어로 작성된 프로그램은 크게 코딩(coding), 컴파일(compile), 링킹(linking)의 3단계 변환 과정을 거쳐 완성된다.
- 완성 과정
- 1. 코딩 단계는 설계를 바탕으로 소스 코드를 작성하여 소스 파일(source file)을 생성
- 2. 컴파일 단계는 소스 파일이 목적 파일로 변환되는 과정
- 3. 링킹 단계는 목적 파일을 실행 파일로 변환하는 과정
소스 파일의 생성
- C 프로그램 안에 있는 명령어들을 소스 코드라 한다.
- 소스 코드를 입력하기 위해서는 에디터가 필요하다.
- 컴파일 전 디스크에 파일 형태로 저장해야 한다. C 프로그램은 보통 .c라는 확장자를 가진다.
소스 파일의 컴파일
- 작성된 소스 파일을 컴퓨터가 이해할 수 있도록 기계어로 변환하는 과정
- 소스 파일을 컴파일러를 이용해 컴파일하면 목적 파일(object file)이 생성된다.
- 목적 파일은 .obj 확장자를 가진다.
- 목적 파일 하나로는 큰 의미가 없고 라이브러리라는 파일과 연결되어 하나의 프로그램이 되었을 때만 의미를 갖는다.
- 목적 파일들을 서로 연결하기 위해 링킹(linking) 과정이 필요하다.
실행 파일의 생성(링킹)
- 컴파일된 목적 파일들을 라이브러리 파일과 연결하여 실행 파일을 생성
- 링킹을 위해 사용되는 도구를 링커(linker)라고 한다.
- 컴파일러는 대부분 링커까지 제공하므로 컴파일할 때 링킹 과정이 자동적으로 처리된다.
- 링킹 과정이 끝나면 .exe 확장자를 가진 실행 파일이 생성된다.
반응형
C 프로그램의 구성
프로그램의 기본 구조
도입부
- 프로그램의 시작 부분
- 프로그램 설명
- 선행 처리를 위한 다른 파일 포함이나 매크로(macro) 정의
- 프로그램 전체에 사용되는 전역 변수 선언
- 사용자 함수 원형 선언
main() 함수
- main 함수는 C 프로그램의 핵심 부분으로 실행 파일에는 반드시 1개의 main 함수가 존재해야 한다.
- 실행 시 가장 먼저 찾게 되는 C 프로그램의 시작 위치를 나타낸다.
- main 함수 실행 후 운영체제에 반환하는 값이 없을 경우에는 void main과 같은 형식을 취한다.
호출된 함수()
- 함수는 하단 부분에 별도로 정의해야 한다.
정리
- C 언어를 작성할 때 고려할 규칙
- C 프로그램은 반드시 하나 이상의 main() 함수를 포함
- main 함수가 반드시 존재
- 함수의 시작과 끝을 알리는 중괄호({}) 사용
- 중괄호 안에는 변수 선언문, 치환문, 연산문, 함수 등의 명령 기입
- 선행처리기(perprocessor)를 제외하고 문장의 끝에는 세미콜론(;)을 필수로 붙임
C 프로그램의 구성 요소
- 컴파일러는 프로그램을 구성하는 문자들을 기본 처리 단위인 토큰(token)으로 분리하고 올바른 규칙을 따르는지 검사하여 올바르면 실행 코드를 생성.
- C 프로그램을 구성하는 기본 토큰
- 예약어 : int, char, if, for 등
- 명칭 : 변수, 배열, 함수 등의 이름
- 상수 : 값이 불변인 자료
- 연산자 : =, +, *, /, ++ 등
- 설명문 : 주석
예약어
- C 언어에 미리 정의되어 있는 의미 있는 단어를 예약어(reserved word)라고 한다.
- 특정 의미를 가지고 있기 때문에 함부로 사용해서는 안 된다.
- 자료형에 관한 예약어 : int, char, float, short, long, double, unsigned, union, enum, void
- 기억 관련 예약어 : auto, static, extern, register
- 제어 관련 예약어 : if~else, for, while, do~while, switch~case, break, continue, return
- 기타 예약어 : main, sizeof, include 등
명칭
- 프로그램을 작성하다 보면 변수나 함수, 매크로 등의 이름을 만들어 사용한다.
- 이름을 나타내는 문자열을 사용자 정의 명칭(identifier)이라 한다.
- 이름 명명 규칙
- 영문자와 숫자의 조합
- 명칭의 첫 문자는 영문자나 밑줄(_)이어야 한다. 숫자 X
- _를 제외한 특수문자는 사용 불가능
- 문자 사이에 공백 불가능
- 예약어 사용 불가능
- 영문자 중 대문자와 소문자는 서로 구별하여 사용
상수
- 상수(constant)에는 수치 상수, 문자 상수, 문자열 상수가 있다.
연산자
- 연산자(operator)를 이용하여 각종 연산을 수행할 수 있다.
설명문(주석)
- 여러 줄에 걸친 주석을 넣으려면 /*와 */를 사용한다.
- 한 줄짜리 주석을 넣으려면 //를 사용한다.
- 프로그램의 어느 부분에도 위치할 수 있다.
- 2개 이상의 라인으로 계속될 수 있다.
- C 컴파일러는 주석 내용은 무시하고 컴파일한다.
반응형
에러와 경고
- 소스 파일을 컴파일하고 링킹 하는 과정에서 발생하는 에러는 크게 에러와 경고로 나눌 수 있다.
에러
- 컴파일러는 C 언어의 문법상 명백하게 잘못된 점이 있어 컴파일할 수 없는 경우 에러(error) 메시지를 출력하고 컴파일을 거부한다.
- 컴파일 시 소스 프로그램에 에러가 있는 경우에는 컴파일을 계속할 수 없으므로 에러 메시지를 확인하여 반드시 수정해야 한다.
경고
- 코드의 내용이 의심스러워 보이기는 하나 일단 컴파일은 가능한 경우에 발생한다.
- 현재는 큰 문제가 없지만 이식성에 불리하거나 C 언어 문법에서 권장하지 않는 방법으로 코드를 작성했을 때에도 발생한다.
- 무시해도 큰 상관은 없다.
반응형