[C언어] 자료형과 선행처리기

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

 

상수와 변수

상수

  • 상수 : 한번 정해지면 그 값을 변경할 수 없는 수. 값이 정해진 상수는 프로그램 실행 도중에 값을 변경할 수 없다.
  • 정수형 상수 : 10진수, 8진수, 16진수로 표현할 수 있다.
  • 실수형 상수 : 부동소수점형 상수라고도 하며, 정수형보다 큰 값이나 작은 값을 처리하는 데 사용된다. 실수형 상수는 double형을 기본 자료형으로 사용한다.
  • 문자형 상수 : 단일 인용부호('')로 묶여있는 1개의 영문자나 숫자문자이다. ASCII 코드값이 사용된다. 
    • escape 문자의 경우 \n(줄바꿈), \t(탭), \0(ASCII 코드값이 0인 문자_null문자) 등이 있다.
  • 문자열 상수 : 이중 인용부호("")로 묶여 있는 복수개의 영문자와 숫자로 이루어진 상수이다. 기억공간에 보관될 때에는 문자열 끝에 null 문자(\0)가 추가된다.

변수

  • 변수 : 프로그램 실행 도중 변할 수 있는 값이 저장되는 기억공간이다. 자료를 저장할 기억공간을 확보하고 이 공간에 이름을 붙여준 것.
  • 변수를 사용하기 전에는 반드시 그 변수를 선언하여 컴파일러가 기억공간에서 일정 공간을 확보할 수 있도록 해야 한다.
  • 변수의 특징
    • 모든 변수는 이름이 있다.
    • 모든 변수는 정해진 자료형이 있다.
    • 모든 변수는 할당된 값을 갖는다.
  • 변수명의 정의 규칙
    • 모든 변수는 사용되기 전에 선언되어야 한다.
    • 반드시 영문자나 밑줄(_)로 시작해야 한다.
    • 중간에 숫자, 밑줄(_)을 섞어서 명명할 수 있다.
    • 중간에 밑줄(_) 이외의 특수문자를 섞어서 명명할 수 없다.
    • 대소문자를 구별하여 사용한다.
    • 예약어는 사용할 수 없다.
반응형

 

자료형과 변수 선언

자료형

기본 자료형의 크기와 범위

  • 정수 자료형
    • int로 정의되며, 앞에 크기를 나타내는 short, long 키워드를 붙이거나 부호 있는 정수를 나타내는 signed 키워드와 부호 없는 정수를 나타내는 unsigned 키워드를 붙여 정의한다.
    • 다른 키워드와 같이 사용할 때 int는 생략 가능하다.
  • 실수 자료형
    • float(4byte), double(8byte), long double(8byte)이 있으며 기본형은 double이다.
    • float형은 단정밀도 부동 소수점, double형은 배정밀도 부동 소수점으로 저장된다.
  • 문자형
    • ASCII 코드를 사용하여 처리
    • -128~127까지의 값을 표현할 수 있음
  • 8진수, 16진수의 지정
    • 8진수는 숫자 앞에 0을 입력하면 된다. ex) int octal_value = 010
    • 16진수는 숫자 앞에 0x를 입력하면 된다. ex) int hex_value = 0xAC
  • 열거형
    • 변수가 가질 수 있는 값을 나열해 놓은 것
    • 열거형은 제한적이나, 숫자 대신 단어를 사용할 수 있어 프로그램의 가독성을 높인다.
    • enum 태그명 {열거자1, 열거자2, .... }
    • ex) enum day {SUN, MON, TUE, WED, THU, FRI, SAT};
    • 열거자의 값은 디폴트 첫 번째는 0이고, 각 원소는 이전 원소의 값보다 하나 더 큰 값을 갖는다.

변수 선언

  • 변수명과 변수가 가질 자료형을 지정하여 변수를 위한 기억공간을 할당하는 것
  • 자료형 변수명;
    • ex) int num;
  • 변수 선언 시 고려해야 할 사항
    • 변수에 저장될 값의 크기
    • 변수의 선언 위치
    • 변수의 초기화

변수에 저장될 값의 크기

  • 해당 변수에 저장하게 될 자료의 최솟값과 최댓값의 범위를 고려하여 자료형 선택
  • 자료형이 가지는 범위보다 더 큰 값이나 더 작은 값을 대입하면 오버플로(overflow) 또는 언더플로(underflow)가 발생한다.

변수의 선언 위치

  • 변수가 통용되는 범위를 결정하므로 매우 중요하다.
  • 함수의 외부와 내부에 선언할 수 있다.
  • 함수의 외부에서 선언된 변수는 프로그램 어디에서나 쓸 수 있는 전역변수가 된다.
  • 함수 내부에서 선언된 변수는 선언된 함수의 내부에서만 사용하며 이는 지역변수가 된다.
  • 전역변수 : 프로그램이 실행되는 동안에는 항상 기억공간에 존재하기 때문에 메모리상에서 항상 존재하는 자료 영역에 저장된다. 초깃값을 설정하지 않아도 0으로 자동으로 초기화된다.
  • 지역변수 : 함수가 호출될 때 생성되어 함수의 실행이 끝나면 기억공간에서 소멸된다. 그렇기 때문에 임시 기억공간인 스택 영역에 저장된다. 초깃값이 자동으로 설정되지 않는다.

변수의 초기화

  • 모든 변수는 변수 선언이 이루어지면 선언된 변수에 특정 값을 부여해야 하며, 이를 변수의 초기화라고 한다.
  • 변수는 기억공간에 존재하고 있던 기존의 값(쓰레기 값)을 그대로 유지하고 있기 때문에 초기화하지 않으면 에러가 발생할 수 있다.
반응형

 

선행처리기

선행처리기란?

  • 컴파일 명령을 내렸을 때 컴파일에 앞서 프로그램 선두에 선언된 지시자들을 미리 처리하는 역할
  • C언어로 작성된 소스 코드를 실행 파일로 만드려면 다음과 같은 과정을 거쳐야 한다.
    • 선행처리
    • 컴파일
    • 링킹
  • 소스 파일을 컴파일러에 전달하기 전에 사용자가 정의한 각종 내용을 먼저 처리한다. 예를 들면 *.h(헤더 파일)의 경우는 컴파일을 시작하기 전에 해당 헤더 파일을 불러와 소스 파일과 연결시켜 준다.
  • 선행처리기 종류
    • #inclued : 파일 포함
    • #define : 매크로 정의
    • #if, #else, #elif, #endif : 조건부 컴파일
  • 선행처리기 사용 시 주의할 점
    • 반드시 #으로 시작
    • 명령문 끝에 세미콜론(;)을 붙이지 않는다.
    • 한 줄에 하나의 명령만 기재
    • 소스 프로그램의 첫 부분(도입부)에 위치한다.

 

반응형

파일 포함

  • #include <파일명>
    #include "파일명"
  • #include 다음에 제시된 파일을 현재 프로그램에 포함
  • <파일명>은 표준 디렉터리(보통 include 디렉터리)에서 파일을 찾아 포함한다.
  • "파일명"은 현재 사용중인 디렉터리나 지정된 디렉터리 파일을 찾아 포함, 또는 드라이브나 경로가 사용될 수 있음.
  • #include는 보통 C 언어에서 제공되는 헤더 파일(*.h)을 자신의 소스 파일에 읽어 들여 함께 컴파일하고자 할 때 사용된다.
  • 프로그래머가 헤더 파일을 만들 수있으며 확장자가 .h이기만 하면 된다.

매크로 정의

  • #define을 사용하여 단순 치환되는 자료를 말한다.
  • 프로그램 작성 시 명령이나 수식 또는 상숫값이 자주 사용될 때 이들을 대표하는 이름을 붙여 사용하는 대상을 매크로라고 한다.
  • 매크로의 정의는 매크로 상수 정의와 매크로 함수 정의로 나눌 수 있다.
  • 매크로 사용 시 주의할 점
    • 매크로명은 일반적으로 대문자를 사용한다.
    • 매크로 정의문 끝에는 세미콜론(;)을 사용하지 않는다.
    • 문자열이 한 줄을 넘어설 때는 \를 사용한다.
    • 매크로 정의를 해제할 때는 매크로명만 기입한다. ex) #undef 매크로명

매크로 상수 정의

  • #define 매크로명 자료 → 매크로 정의
    #undef 매크로명 → 매크로 정의 해제
    ex) #define PI 3.141592

매크로 함수 정의

  • #define 매크로명(인수) (수식)
    ex) #define AREA(x) (3.141592 * (x) * (x))
  • 매크로 함수 장점
    • 선행처리기에 의한 단순 치환 방식이므로, 전달 인자의 자료형을 명시할 필요가 없고, 또 어떠한 자료형 변수를 인자로 전달해도 잘 동작한다.
    • 한두 줄의 코드의 경우 함수로 정의하는 것보다 속도가 빠르다.

조건부 컴파일

  • 조건에 따라 프로그램을 컴파일하는 명령으로, 최적의 코드로 프로그램을 작성할 수 있기 때문에 시스템의 성능을 향상시킬 수 있다.
  • #if 조건
       명령문;
    #endif
  • #if 조건
       명령문1;
    #else
       명령문2;
    #endif
  • #if 조건
       명령문1;
    #elif 조건2
       명령문2;
    #else
       명령문3;
    #endif
  • 조건이 참이면 명령문을 코드로 생성하여 컴파일, 거짓이면 코드는 생성되지 않음.
  • 실행 중에 값이 결정되는 변수를 지정하거나 함수를 호출할 수 없으며, 주로 매크로 값이 지정된다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'방통대 컴퓨터과학과/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
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[C언어] 자료형과 선행처리기
상단으로

티스토리툴바