11 – 상수 (열거형)

기호 상수랑 동일한 목적으로 사용되는데, 몇 가지 형식이 있는 상수이다. enum이란 예약어로 말 그대로 열거를 하듯 선언을 하고, 사용되는 변수는 전부 int형으로 전환되어 나온다. 이게 어떤 것인지 잘 모르겠다면 일단 하나 하나 살펴보도록 하겠다.

일단 선언은 다음과 같은 방식으로 한다.

enum 열거형이름 {열거상수, 열거상수, ……};

열거상수는 열거를 할 상수들이다. 그리고 그 것들을 전부 다 묶어서 열거형이름으로 두는 것이다. 그리고 각 열거상수당 해당되는 숫자들이 주어지는데, 0부터 시작을 한다.

enum fruit {apple, pear, orange, lemon, peach, grape};

위에 예시처럼 되어 있는 fruit의 경우, apple에 대응되는 시작 숫자는 0이 된다. 그러면 pear는 1, orange는 2, … 이런 식으로 순서대로 증가하게 된다.

시작 숫자를 바꿀 수 있다. 시작 숫자에 대해서는 선언할 때 적으면 된다. 아래에서 처럼 apple에 1이라고 미리 선언해 버리면 1부터 시작하는 열거형이 된다.

enum fruit {apple=1, pear, orange, lemon, peach, grape};

이런 열거형 상수의 경우에는 주로 달, 월과 같이 묶여서 처리되는 상수들을 선언하여 사용하고자 할 때 주로 이용된다. 사용법을 한 두 번 보다보면 금방 이해할 수 있다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-7-35-53

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-7-37-15

10 – 상수(기호 상수)

프로그램 내에서 의미 없는 이름이나 기호로 표시하는 상수로, 실제 상수와 마찬가지고 내용은 변경할 수 없다. 하지만, 실제 상수보다 사용이 편리하고 이해하기 쉽다.

일일이 숫자나 특정 값을 처리하는 것보다 글 형태로써 상수를 이용하는 것이 더 인식하기 쉽기 때문에 자주 이용하는 방식이다.

선언은 #define 으로 선언하여 사용하는데, 대분자로 선언하는 것이 일반적이다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-6-38-05

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-6-38-28

09 – 상수 (확장 문자열)

앞에서 보면 \n, \t과 같은 특수 문자를 이용하였다. 이런 특수문자들을 바로 확장 문자열이라고 한다. 확장 문자열은 printf 함수에서 특수한 형식화를 제어하기 위해 사용되며, ‘\’와 하나의 문자로 구성된다. 그리고 화면에 표시되지 않고 특수한 의미만을 지니고 있다. 확장 문자열은 일단 다음과 같이 보면 된다. 또한 이미 프로그래밍 언어에서 쓰이는 특수한 문자들을 표시할 때도 쓰인다.

  • \a: 경고음
  • \b: 백 스페이스
  • \n: 개행(엔터)
  • \t: 수평 탭
  • \v: 수직 탭
  • \\: 백 슬래시(\)
  • \?: 물음표
  • \’: 작은 따음표
  • \”: 큰 따음표

앞에 글에서 \t를 이용한 프로그램을 작성하였었다. 해당 예시를 보면 금방 확인할 수 있다.

08 – 상수 (문자열)

문자열은 문자를 나열한 것으로 큰따음표를 사용하여 표현한다. 주로 printf문에서 이용하던 것도 문자열이다.

문자열 끝에는 마지막임을 의미하는 NULL 문자가 포함되어 있다. 이 문자가 있는 이유는 문자와 문자열이 전혀 다른 것임을 알려주는 것이다. ‘a’, “a”와는 전혀 다른 것이다. 이 둘은 어떤 구조로 이루어져 있냐면

  • ‘a’ = [a]
  • “a” = [a][\0]

이렇게 되어 있다. “hello world” 또한

  • “hello world” = [h][e][l][l][o][ ][w][o][r][l][d][\0]

이런 식으로 각 문자열을 구성하는 모든 문자들과 그 마지막의 \0을 보고 문자열로 취급하는 것이다.

이런 문자열 상수를 printf로 화면에 출력해보는 코드와 그 결과를 확인한다. 변환 문자열은 %s로 처리한다. 또한 여기에는 \t라는 특수 문자를 이용했는데, 이 문자는 탭만큼 커서를 이동할 때 쓴다. 기본 탭은 8개의 스페이스만큼 이동한다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-2-01-47

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-2-02-17

07 – 상수 (문자)

문자 상수는 작은 따음표 사이에 문자를 위치시켜 생성된다. ‘b’와 같이 하면 된다. 모든 문자 상수는 대응되는 정수값이 있다. 이 값은 시스템에서 문자를 표현하기 위해 사용되는 코드에 따라 정해진다. ASCII를 기준으로 할 경우, ‘b’의 경우에는 십진수 98이 되는데, 아래의 두 표현은 같은 표현이 됟다.

ch = ‘b’;

ch = 98;

하지만 정수값을 사용하는 시스템에 따라서 값이 달라지므로 보통은 직접 적는 방식을 한다. ‘b’, ‘8’ 이 둘 다 작은 따음표 안에 있는 표현이기 때문에 둘 다 문자로 표현된다.

문자 상수도 printf로 출력이 가능하다. 문자 상수에 대한 변환 문자열은 %c이다.  아래의 예시에서는 직접 문자와 숫자의 차이를 보여주기 위해서 입력 차이를 두고 작업을 해 보았고, 그 결과를 같이 확인하기를 바란다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-1-19-34

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-1-19-25

06 – 상수 (숫자)

앞에서는 문자를 화면에 출력했는데, 이러한 문자열도 상수에 속한다. 그럼 상수가 어떤 것인지를 알고, 여러 상수에 대해서 알아보도록 한다.

‘상수’는 프로그램이 실행되는 동안 변하지 않는 값이다. 숫자, 문자, 문자열 등 여러 상수가 존재한다. 이런 상수를 이용한 프로그램들에 대해서 하나씩 살펴본다.

계산에 이용되는 상수는 크게 고정소수점 상수와 부동소수점 상수고 분류되는데, 고정 소수점은 다시 여러 진수의 정수로 분류된다. 주로 쓰이는 것은 8진수, 10진수, 16진수 정도를 많이 쓴다. 부동소수점 상수는 지수 표현과 소수점 표현으로 구분된다. 이러한 수치 상수를 printf로 출력하는 프로그램이 아래와 같다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-12-41-05

저렇게만 넣으면 어떤 상황인지 모르니 직접 실행한 결과도 같이 본다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-12-41-35

8진수와 16진수라고 주석에 적은 숫자는 확실히 출력된 숫자가 10진수로 출력하도록 되어 숫자가 다르게 나왔다. 저런 식으로 8진수에는 앞에 0을, 16진수에는 앞에 0x를 입력하여 8진수 숫자인지 16진수 숫자인지 표시해 주면 된다.

이 프로그램에서 또 하나 주목해야 할 것이 바로 printf 문에 있는 특수 문자이다. “” 사이에 있는 내용을 그대로 출력하는 일반적인 것과 달리 %d와 같이 %로 시작되는 내용이 있으면 그대로 출력하는 것이 아니라 큰따음표 밖에 있는 대응되는 인수의 내용을 출력하라는 뜻이 된다. 이러한 특수 문자를 변환 문자열이라고 하는데, 출력 형식을 지정하여 쓸 수 있다.

  • %d: 인수를 10진수 형태로 출력
  • %o: 인수를 8진수 형태로 출력
  • %x: 인수를 16진수 형태로 출력
  • %f: 인수를 실수(소수점 형식) 형태로 출력
  • %e: 인수를 실수(지수 형식) 형태로 출력
  • %g: 인수를 %f와 %e중 짧고 보기 좋은 형태로 출력

변환 문자열 하나 당 해당되는 인수 가 1:1로 대응한다. 즉, 안에 변환 문자열이 3개 있으면 뒤에 붙는 인수도 3개가 되어야 한다. 인수끼리의 구분은 ,로 구분한다. 3개를 예를 들면 아래와 같은 식이다.

printf(“%d %d %d \n”,10, 20, 30);

05 – 주석

C언어를 포함한 모든 언어는 소스코드에 주석을 달 수 있다. 주석의 단어 뜻 그대로 원자번호 50번… 아니 아니라 낱말이나 문장의 뜻을 쉽게 풀이한 글이다.

주석이 필요한 이유는 길이가 길어지는 프로그램에서는 어떤 것이 어떤 것인지 구분이 어려워지는데, 그때 이용하는 것이 좋다. 각 부분에 대한 설명을 직접 달아서 언제 보더라도 어떤 것인지를 확실히 하는 것이다.

변수 지정은 다음과 같이 진행한다. 예시도 추가한다.

  • /*  */ : 저 둘로 둘러쌓인 내용이 주석이 된다. 주석의 내용은 한줄로 써도 되고, 여러 줄로 써도 상관 없다.
  • // : 한 줄에 대해서 주석을 작성한다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-03-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-12-17-49