[C언어] C 언어의 정의

2022. 5. 1. 03:16·방통대 컴퓨터과학과/3학년1학기
반응형

 

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 언어의 3단계 변환 과정

반응형

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 언어 문법에서 권장하지 않는 방법으로 코드를 작성했을 때에도 발생한다.
  • 무시해도 큰 상관은 없다.

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'방통대 컴퓨터과학과/3학년1학기' 카테고리의 다른 글
  • [운영체제] 프로세스 개요
  • [Java] Java와 객체지향 프로그래밍
  • 데이터베이스의 이해
  • [운영체제] 운영체제의 개요
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    토비의스프링부트
    운영체제
    SQL
    JPA
    Spring
    SpringBoot를 이용한 RESTful Web Service 개발
    스프링부트
    자바스크립트
    인프런
    코딩테스트
    넥사크로
    에러해결
    egov
    기출문제
    방통대
    MSA
    springboot
    토이프로젝트
    프로그래머스
    Java
    알고리즘
    전자정부프레임워크
    프론트엔드
    IT
    QueryDSL
    react
    개발자
    oracle
    백준
    RESTful
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[C언어] C 언어의 정의
상단으로

티스토리툴바