#define문을 이용하여 심볼릭 상수를 만드는 방법.


<예제>

01: #include <stdio.h>

02:

03: #define PI 3.14

04: #define NUM 100

05: #define BUFFER_SIZE 200

06:

07: int main()

08: {

09: printf("%lf \n", PI);

10: printf("%d \n", NUM);

11: printf("%d \n", BUFFER_SIZE);

12:

13: return 0;

14: }




03행부터 05행까지 #define 문은 전처리기에서 수행되는 문장이다.

전처리기란 컴파일러가 소스파일을 컴파일하기 전에 먼저 이루어지는 과정으로,


위의 코딩에서 보여지듯이

#define 문은 프로그램에서 여러번 사용되는 상수값을 

매크로상수로 정의해서 사용하게 한다.


그렇다면, 우리가 프로그램을 코딩할 때,

리터럴 상수대신에 심볼릭 상수를 사용하는 이유는 무엇일까?


3.14 라는 리터럴 실수형 상수가 프로그램에서 100번 사용되고 있다가

4.14 로 변경되어야 하는 경우에 우리는 할 수없이 지금까지 코딩해온 프로그램에서 사용한 3.14 라는 리터럴 상수를 100번 모두 수정해야하는 문제가 발생하게 된다.


이게, 얼마나 귀찮은 일인가?


만일, 3.14.와 같은 리터럴 실수형 상수를 심볼릭 상수로 정의해 놓았다면,

const 키워드나 #define 문의 선언문만 한번 고치면 일사천리이다.

이렇게 되면 프로그램 수정이 얼마나 간단하게 이루어지는지 체감하게 될 것이다.


<결과값>



다음의 예제를 통해서

const 키워드를 이용해 심볼릭상수를 만드는 방법에 관해 살펴보자.

심볼릭상수의 이름은 대문자로 표시하는 것이 좋다.



01: #include <stdio.h>

02: int main()

03: {

04: const int NUM = 100;                //심볼릭 상수의 선언과 동시에 초기화

05: const double PT = 3.14;             //심볼릭 상수의 선언과 동시에 초기화

06:

07: // NUM=200;

08: // PT=4.14;

09:

10: return 0;

11: }


04행과 05행에서

const 키워드를 이용하여 변수 NUM을 상수로 만들고, 변수 PI를 상수로 만들었다.

이제, 이때부터 100을 NUM이라고 쓰고, 3.14를 PI라고 대신 쓰면 된다.

이것이 바로 심볼릭 상수의 매력이다.


리터럴 상수를 의미있는 이름으로 심볼릭 상수화 시킨 것이다.


<주의>

심볼릭 상수를 만들 때 주의할 점이 있다.

바로 그것은 선언과 동시에 초기화를 해야한다는 것이다.

그렇게 하지 않으면 문제가 발생한다.

왜, 어째서 문제가 되는지 다음 예제를 통해서 공부해보자.



01: #include <stdio.h>

02: int main()

03: {

04: const int NUM;                        //심볼릭 상수의 선언

05: NUM = 100;                            //error 발생

06:

07: return 0;

08: }


04행에서 심볼릭 상수를 선언하고 초기화를 하지 않았다.

그리고 세미콜론; 을 통해 한 문장을 끝냈다.

여기서, 무엇이 문제일까?

바로 NUM을 초기화하지 않은 상태에서 심볼릭상수의 선언을 끝낸 것이다.

이것 때문에 심볼릭 상수는 아무런 의미가 없는 값이 상수화되어 버렸다.

05행에서 현재 NUM에는 아무 의미가 없는 값이 초기화되어서 심볼릭 상수가 되었기에

컴파일 에러가 발생했다.








심볼릭(Symbolic) 상수.

C언어 상수란? 2015. 4. 28. 09:00 Posted by 네트동자

심볼릭(Symbolic) 상수란?


- 상수를 기호화하여, 의미있는 이름으로 지어서 쓰는 상수를 의미한다.

다시말해, 리터럴 상수와 반대의 개념으로 '변수를 상수화 하는 것'이다.


심볼릭상수를 만드는 방법은 크게 두가지가 있다.

1. const 키워드를 이용하는 것.

2. 매크로 상수를 이용하는 것.


 

리터럴 상수란? 문자열 상수.

C언어 상수란? 2015. 4. 27. 09:00 Posted by 네트동자

문자열 상수란?

 

- 문자열 상수란 큰따옴표( "  " )로 묶은 하나 이상의 문자로 구성된 문자열을 의미한다.

 

 

 

다음의 예제를 통해 간단히 알아보도록 하자.

 

01: #include <stdio.h>

02: int main(void)

03: {

04: printf("문자열 상수는 %s입니다. \n", "A");

05: printf("문자열 상수는 %s입니다. \n", "10+10");

06: printf("문자열 상수는 %s입니다. \n", "Hi, everyone");

07:

08: return 0;

09: }


04행부터 06행까지 큰따옴표 안에 있는 문자, 숫자, 문자열은 

서식문자 %s로 출력가능한 <문자열 상수>임을 기억하라!


컴파일러는 큰따옴표로 묶은 문자열상수를 저장할 때,

문자열상수 맨 마지막에 끝을 알리는 종료문자 \0(10진수 0을 의미)을 자동으로 추가한다.

이것을 우리는 NULL 문자라고 부른다.


04행을 자세히 살펴보자.

04: printf("문자열 상수는 %s입니다. \n", "A");

04행을 살펴보면, A는 한개의 문자이지만, 큰따옴표(" ")로 둘러싸여 있습니다.

그러면, A는 문자상수일까, 아니면 문자열상수일까?

결론 - A는 문자열 상수다.


그 이유는 큰따옴표를 인식한 컴파일러가 A끝에 종료문자(\0)를 자동으로 추가해

서식문자 %s로 출력하도록 하기 때문이다.


못믿겠는가?

만일, 그렇다면, 문자열상수 A를 %c로 출력해보라.

출력되지 않는다는 것을 알 수 있다.


리터럴 상수란? 문자 상수.

C언어 상수란? 2015. 4. 27. 09:00 Posted by 네트동자

문자상수란?

- 작은따옴표(' ')로 묶은 문자 하나를 의미한다.

 

예를들면,

A, B, a, b, &, *, + 처럼

Keaboard로 표현할 수 있는 영문자숫자, 특수기호들이다.

 

다음 예제를 통해 간단히 알아보자.

 

01: #include<stdio.h>
02: int main(void)
03: {
04: printf("문자상수 %c %c %c입니다. \n", 'a', 'b', 'c');
05: printf("문자상수 %c %c %c입니다. \n", '!', '@', '#');

06:

07: return 0;

08: }

 

<결과값>

 

 

04행에서 알파벳 a, b, c를 서식문자 %c로 출력하고 있다.

05행에서 특수기호 ! @ # 을 서식문자 %c로 출력하고 있다.

 

우리는 바로 이 부분에서 의문을 가질수 밖에 없다.

"어? 왜, 알파벳이 상수지?"

"어? 왜, 특수기호가 상수로 정의되는거지?"

만일, 여러분께서 이러한 점들에 의문을 가진다면 ASCII 코드를 알아봐야 합니다.

이 ASCII 코드를 살펴보면,

10진수, 16진수, 문자에 관련된 코드들이다.

 

만일, 그 표를 한번 참조해본다면,

알파벳 a, b, c 그리고 특수기호 ! @ #가 각각 10진수로 얼마로 표현되어 있는가?

또 16진수로 얼마로 표현되어 있는가?

 

 

다음의 예제는 문자상수 ASCII 코드 표에 나타난 10진수 값과 16진수 값으로 출력하는 코딩이다.

 

01: #include <stdio.h>
02: int main(void)
03: {
04: printf("문자상수 %c %c %c는 \n", 'a', 'b', 'c');
05: printf("ASCII 코드 10진수로 표현한다면 %d %d %d \n", 'a', 'b', 'c');
06: printf("ASCII 코드 16진수로 표현한다면 %x %x %x \n", 'a', 'b', 'c');

07:

08: printf("\n-------------------------------------------------------------\n");

09:

10: printf("문자상수 %c %c %c는 \n", '!', '@', '#');
11: printf("ASCII 코드 10진수로 %d %d %d \n", '!', '@', '#');
12: printf("ASCII 코드 16진수로 %x %x %x \n", '!', '@', '#');

13:

14: return 0;
15: } 

 

 

 

결과값.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

리터럴 상수란? 실수형 상수.

C언어 상수란? 2015. 4. 27. 09:00 Posted by 네트동자

실수형 상수란? 123.45와 같이 소수점을 포함하는 상수.

 

다음의 예제를 통해 실수형 상수에 대해 알아보자.

 

#include <stdio.h>
int main(void)
{


 printf("실수형 상수 %lf + %lf = %lf입니다. \n", 3.1, 4.1, 3.1 + 4.1);

 

 return 0;


}

 

결과값

 

 

 

'C언어 상수란?' 카테고리의 다른 글

리터럴 상수란? 문자열 상수.  (0) 2015.04.27
리터럴 상수란? 문자 상수.  (0) 2015.04.27
리터럴 상수란? - 정수형 상수  (0) 2015.04.26
리터럴 상수와 심볼릭 상수  (0) 2015.04.26
상수란?  (0) 2015.04.26

리터럴 상수란? - 정수형 상수

C언어 상수란? 2015. 4. 26. 09:00 Posted by 네트동자

우리는 1, 2, 3, a, b, c 등과 같이 숫자나 문자를 읽을 때

숫자나 문자 그대로 있는 그대로의 개념을 부여한다.

 

다시말해, 읽은 그대로의 의미가 있는데 이러한 것들을 C 프로그래밍에서

Literal 상수라고 한다.

 

리터럴 상수 : 정수형 상수, 실수형 상수, 문자 상수, 문자열 상수 가 있다.

 

 

정수형 상수란?

- 소수점이 포함되지 않은 상수.

C언어에서 정수형 상수는 10진수, 16진수, 8진수의 형태로 표현이 가능하다.

그렇다면 우리는 어떻게 10진수 30, 16진수 30, 8진수 30을 구분할수 있을까?

 

16진수는 0x를 8진수는 0을 사용하여 정수형 숫자를 구분할 수 있다.

 

 

정수형상수 

출력 서식 

표현 방법 

 예

 10진수 

%d 

 10, 20, 30

  int a=30

  printf("%d \n",a);

16진수

%x 

0x12, 0x20, 0x30 

  int b=0x30;

  printf("%x \n",b);

 8진수

%o 

 012, 020, 030

  int c=030

  printf("%o \n, c);

 

 

다음 예제를 실행해보자.

 

01 : #include <stdio.h>
02 : int main(void)
03 : {
04 : printf("10진수 정수형 상수 %d + %d = %d입니다. \n", 10, 20, 10 + 20);
05 :  printf("16진수 정수형 상수 %x + %x = %x입니다. \n", 0x10, 0x20, 0x10 + 0x20);
06 : printf("8진수 정수형 상수 %o + %o=%o입니다. \n", 010, 020, 010 + 020);

07 :

08 : return 0;
09 : }

 

실행결과

 

 

04행에서 10진수형 상수 10, 20, 10+20을 서식 문자 %d를 통해 출력하고 있습니다.

05행에서 16진수 정수형 상수 0x10, 0x20, 0x10 + 0x20을 서식문자 %x를 통해 출력하고 있다.

06행에서  8진수 정수형 상수 010, 020, 010 + 020을 서식문자 %o를 통해 출력하고 있다.

 

<주의> 8진수를 표현할 때에는 반드시 숫자 앞에 0을 붙여야만 한다~!

'C언어 상수란?' 카테고리의 다른 글

리터럴 상수란? 문자열 상수.  (0) 2015.04.27
리터럴 상수란? 문자 상수.  (0) 2015.04.27
리터럴 상수란? 실수형 상수.  (0) 2015.04.27
리터럴 상수와 심볼릭 상수  (0) 2015.04.26
상수란?  (0) 2015.04.26

리터럴 상수와 심볼릭 상수

C언어 상수란? 2015. 4. 26. 09:00 Posted by 네트동자

변수도 정수형 변수, 실수형 변수가 있듯이

상수도 크게 두가지 종류가 있다.

 

Literal 상수 : 글자 그대로 의미가 있어서 이름이 없는 상수.

Symbolic 상수 : 상수를 기호화하여 변수처럼 이름을 지어쓰는 상수.

 

'C언어 상수란?' 카테고리의 다른 글

리터럴 상수란? 문자열 상수.  (0) 2015.04.27
리터럴 상수란? 문자 상수.  (0) 2015.04.27
리터럴 상수란? 실수형 상수.  (0) 2015.04.27
리터럴 상수란? - 정수형 상수  (0) 2015.04.26
상수란?  (0) 2015.04.26

상수란?

C언어 상수란? 2015. 4. 26. 09:00 Posted by 네트동자

원의 반지름은 항상 변할 수 있기에 '변수'라고 할 수 있다.

그러나 원주율 3.14는 변하지 않는다.

이처럼, 상수는 어떤 상황에서도 변하지 않는 값을 가진다.



프로그램에서 데이터는 변수 또는 상수의 형태로 사용됩니다.


int i;

i = 3;

i = 4;


예제에서 i라는 변수에 3이라는 숫자상수를 저장했다.

이제 i = 3 이라는 데이터를 프로그램 내에서 사용하게 될 것이다.

그러나, i = 4; 라는 코드를 추가하면 이후부터 i 는 4라는 값으로 변경된다.

 

이렇듯 변수는 여러가지 값으로 바뀔 수 있다.

 

 

다음의 예를 보자.

 

10 = 5

 

이러한 코드를 컴파일 하면, 당연히 에러가 발생한다.

숫자상수 10에 5를 저장할 수는 없기 때문이다.

이것이 바로 상수이다.

이처럼 상수란 프로그램이 실행되는 도중에 값이 변경되지 않는 데이터를 의미한다.