프로그래밍 언어/C

C언어 - 2. 자료형과 선행처리기

nomfang 2021. 3. 9. 01:05
728x90
반응형

2-1. 상수와 변수

자료형

  • 프로그램에서 사용하는 자료의 형태
  • 상수와 변수로 구분하여 사용

프로그램에서 자료를 처리하기 위해서 생성과 저장, 처리과정이 필요

C 프로그램은 수많은 명령어와 자료들로 구성 → 자료의 정확한 처리와 효율적 활용 필요

C언어에는 여러가지 종류의 자료형이 있다

상수

  • 항상 고정된 값을 갖는 자료

  • 값이 한 번 정해지면 프로그램 도중 변경할 수 없는 수

    → 정수형, 실수형, 문자형, 문자열

정수형 상수

  • 10진수, 8진수, 16진수로 표현

실수형 상수

  • 부동소수점 형 상수
  • double형을 기본 자료형으로 사용

문자형 상수

  • 단일 인용부호 (' ')로 묶여 있는 1개의 영문자나 숫자

  • 내부적으로는 ASCII 코드 값이 사용

    → 'A' 는 65(ASCII 코드값)

    — Escape 문자 : 키보드에 나타나 있지 않은 문자

문자열 상수

  • 이중 인용부호(" ")로 묶여 있는 복수개의 영문자나 숫자
  • 기억공간에 보관될 때는 문자열 끝에 null문자 (\0)가 추가되어 구분한다

변수

  • 변할 수 있는 값

  • 프로그램에서 변수는 실행 도중 변할 수 있는 값이 저장되는 기억공간을 의미

    → 수시로 변경될 수 있음

    → 변수는 사용 전 반드시 선언하여 컴파일러가 일정 공간을 확보할 수 있도록 해야함

변수의 특징

  • 모든 변수는 이름이 있다
  • 모든 변수는 정해진 자료형이 있다
  • 모든 변수는 할당된 값을 갖는다

변수명의 정의 규칙

  • 변수는 사용되기 전에 선언되어야 한다
  • 영문자나 밑줄(_)로 시작
  • 중간에 숫자, 밑줄을 섞어서 사용 가능
  • 중간에 밑줄 이외의 특수문자 사용 불가
  • 대소문자 구별하여 사용
  • 예약어는 사용할 수 없음

2-2.자료형과 변수 선언

변수

  • 자료를 저장할 기억공간을 확보하고 공간에 이름을 붙여준 것

변수 선언

  • 확보된 기억공간에 이름을 부여하는 것

    → 변수 선언을 위해 자료형이 필요

#include <stdio.h>

int main(void) {
  char ch;
  ch = 'A';
  printf("ch = %c\n",ch); // ch = A
  int in;
  ch = in = 'A'; 
  printf("ch = %d\n",ch); // ch = 65
  printf("in = %d\n",in); // ch = 65
}

자료형의 종류

정수형

  • int, short, long, unsigned

    → 운영체제에 따라 표현되는 범위가 다름

실수형

  • float, double, long double

    → 기본형은 double

문자형

  • char, unsigned char

    → ASCII코드를 사용하여 처리

열거형

  • 숫자 대신 단어를 사용

    → enum 태그명 {열거자1, 열거자2, ...}

    → 열거형 내에서 열거자의 값은 0부터 시작하지만 값을 치환하여 설정 가능

변수 선언

  • 변수명과 변수가 가질 자료형을 지정하여 기억공간을 할당하는 것

프로그래밍을 하는 이유는 data를 처리하기 위함이다

→ 형식 : 자료형 변수명; ex) int a;

변수 선언 시 고려 사항

  • 변수에 저장될 값의 크기 (범위)
  • 변수의 선언 위치
  • 변수의 초기화 (최초의 어떤 값을 부여하는 것)

변수에 저장될 값의 크기변수에 저장될 값의 크기

#include <stdio.h>

int main(void) {
  short int num1, num2;
  num1 = 32767+1;
  num2 = -32768-1;
  printf("num1 = %d\n", num1);
  printf("num2 = %d\n", num2);
}

→ 범위를 초과하는 연산을 하였을 경우

num1의 경우 short int의 범위 -32768~32767에서 32767의 다음 값인 -32768이 출력

num2의 경우 short int 범위에서 -32768의 이전 값인 32767이 출력됨

변수의 선언 위치

  • 전역변수 : 함수 외부에 변수를 선언, 어디서나 사용 가능
  • 지역변수 : 함수 내부에 변수를 선언, 해당 함수 내에서만 사용 가능

변수의 초기화

  • 변수를 초기화하지 않을 경우 전혀 다른 값이 나올 수 있으니 주의해야함

2-3. 선행처리기 (preprocessor)

  • 컴파일에 앞서 프로그램 선두에 선언된 지시자들을 미리 처리하는 역할

선행처리기를 사용할 때 주의할 점

  • 반드시 #으로 시작
  • 명령문 끝에는 세미콜론( ; )을 붙이지 않는다
  • 한 줄에 하나의 명령만 작성
  • 소스 프로그램의 첫 부분에 작성

#include 선행처리기(파일 포함)

  • C언어에서 제공되는 헤더파일 (*.h)를 자신의 소스파일에 읽어 함께 컴파일할 때

— C프로그램에서 표준함수인 printf(), scanf()등을 사용하려면

함수들의 원형이 선언되어있는 표준 입출력 헤더파일인 stdio.h를 #include해야함

  • 형식 : #include <stdio.h> / #include ".h파일 위치"

#define

  • 매크로를 정의할 때 사용

>> 매크로(macro)

  : #define을 사용하여 단순 치환되는 자료

  : 프로그램 작성 시에 명령이나 수식 또는 상수값이 자주 사용될 때 대표하는 이름을 붙여 사용

>> 매크로 정의

  : 매크로 상수 정의, 매크로 함수 정의

매크로 상수 정의

  • 형식

    : #define 매크로명 자료 (정의한 자료로 치환)

    : #undef 매크로명 (정의 해제)

>> #define PI 3.141592

→ PI를 3.141592로 치환한다

매크로 삼수 정의

  • 형식

    : #define 매크로명(인수) (수식)

    : #define 매크로명(인수, 인수) (수식)

  • 장점

    : 선행처리기에 의한 단순 치환 방식으로 자료형을 명시할 필요 없음 (어떤 자료형도 사용 가능)

    : 한 두 줄의 코드인 경우 함수로 정의하는 것 보다 속도가 빠르다

#include <stdio.h>
#define Hap1(x,y) x+y
#define Hap2(x,y) ((x)+(y)) // 매크로 인수 정의시 괄호의 사용에 따라 처리 순서가 달라짐

int main(void) {
  int h1, h2;
  h1 = 10 * Hap1(3, 4);
  h2 = 10 * Hap2(3, 4);
  printf("h1=%d, h2=%d", h1, h2);
}

Hap1의 경우 더한 값을 10과 곱하였고

Hap2의 경우 각각 10과 곱한 값을 더했다

조건부 컴파일

  • #if #else #elif #endif

    → 조건에 따라 프로그램을 컴파일 하는 명령

    → 최적의 코드로 프로그램을 작성할 수 있기 떄문에 프로그램 성능 향상

    → if와 elif는 조건문이 필요함 (주로 매크로 값을 사용, 변수 지정이나 함수 사용 불가)

#include <stdio.h>
#define CONDITION 1

int main(void) {

  #if CONDITION
    printf("\n A 프로그램 컴파일");

  #else
    printf("\n B 프로그램 컴파일");

  #endif
}

반응형