오늘도 유령같이 등장하여 강의글을 쓰는 마라고입니다. 흘흘 저도 C언어에선 매우 부족하지만 조금이라도 도움을 드리기 위해
저는 강의글을 남겨봅니다.
-----------------------------------------------------------------------------------------------------------------------
상수란 무엇인가..?
상수:변수와 반대되는 말로 항상 값이 일정한 것을 말한다. 즉,우리가 이미 알고있는 숫자,문자등이 상수다.
그런데 C언어에서 상수는 5가지의 형태로 구분하는데요 그것은 바로
정수형,실수형,문자형,문자열 그리고 정수들의 리스트를 나타내는 열거형으로 나눠집니다.
그럼 알아볼까요?
※정수형 상수의 특징
-1234등은 int형 상수이다.
-123456789L처럼 숫자 뒤에 소문자 l 이나 대문자 L을 붙이면 큰 숫자를 표현하는 long int 형 상수가 된다.
-1234U처럼 숫자 뒤에 소문자 u나 대문자 U를 붙이면 부호없는 unsinged int 형이 된다.
-01234 처럼 숫자 앞에 0을 붙이면 8진수를 나타낸다. 따라서 01234는 10진수로 668 이된다.
-0x1234처럼 숫자 앞에 숫자 0과 알파벳 x인 0x를 붙이면 16진수를 나타낸다. 따라서 0x1234는 10진수로 4660이다.
※실수형 상수의 특징
-123.4등은 double형 상수이다. 123.4는 1.234*10의2제곱 과 동일한 표현이며 프로그램작성시에는 1.234e2로 표현한다.
-123.4F처럼 숫자 뒤에 소문자 f나 대문자 F를 붙이면 float 형 상수가 된다.
-123.4L처럼 숫자 뒤에 소문자 l이나 대문자 L을 붙이면 큰숫자를 표현하는 long double 형 이 된다.
※문자형 상수의 특징
-`a`,`0` 처럼 작은 따옴표 안에 하나의 문자를 넣으면 char형 상수가 된다.
-문자형 상수는 코드화 된 문자셋(Coded Character Set)을 이용하여 표현한다.
※문자열 상수의 특징
-"Hello, World!!" 처럼 큰 따옴표안에 여러문자를 넣으면 문자열 상수가 된다.
-"a","0", " " 처럼 큰따옴표 안에 한문자가 들어가거나 아무 문자가 들어가지 않아도 문자열 상수가 된다.
-문자형 상수와 마찬가지로 특수문자를 표현하기 위한 확장열(Escape Sequence)이 적용된다.
-문자열 상수의 끝을 표현하기 위해 문자열 상수의 끝엔 자동적으로 널 문자가 드어간다.
※열거형(Enumeration) 상수의 특징
-열거형 상수는 정수형 상수의 리스트이다,
-enum이라는 키워드를 이용하여 숫자에 의미있는 이름을 붙일때 사용된다.
그럼 이번엔 메모장을 이용하여 예제를 작성해 보겠습니다.
이렇게 쓰시고 TotalSec1.c 로 저장해주시길 바랍니다.
5번째 줄은 해석하자면
-InTotal이라는 이름을 가진 long int형 변수를 선언하고 OL이라는 값으로 초기화 한다.
7번재줄을 해석하자면
-InTotal이라는 변수에 60 * 60 * 24 * 365의 결과를 대입한다.
그런데 여기서 상수표현식 (Constant Expression) 이라는 것이 있는데요 이것은 무엇일가요
상수표현식(Constant Expression)
:상수에 의미있는 이름을 붙이는 것
그런데 이것의 사용형식은 무엇일까요 상수표현식의 사용형식은
#define 상수명 상수
위의 내용을 이해하려면 전처리 (Pre-processing)이라는 것에 대하여 알아야 하는데요
과연 전처리란 무엇일까요?
전처리(Pre-processing)
:소스파일을 미리 살펴보아 프로그래머가 코딩해 놓은 전처리 지시자들을 찾아 그것의 목적에 맞게
변환하는것을 말한다.
#표시가 바로 전처리 지시자 이다.
자 그러면 상수 표현식을 이용하여 작성해 보겠습니다.
TotalSec2.c 로 저장해 주시길 바랍니다.
여기서 3번째줄은
-1분당 초를 나타내는 60을 상수 표현식을 이용하여 SECOND_PER_MINUTE 라는 이름으로 정의한다.
여기서 4번재줄은
-1시간당 분을 나타내는 60을 상수표현식을 이용하여 MINUTE_PER_HOUR라는 이름으로 정의한다.
여기서 5번째 줄은
-1일당 시간을 나타내는 24를 상수 표현식을 이용하여 DAY_PER_YEAR라는 이름으로 정의한다.
여기서 6번째 줄은
-1년당 일을 나타내는 365를 상수 표현식을 이용하여 DAY_PER_YEAR라는 이름으로 정의한다.
여기서 12~15 번째 줄은
-InTotal이라는 변수에 60 * 60 * 24 * 365 대신 해당 상수들의 표현식을 이용하여 계산한후 그 결과를 대입한다
그런데 전처리 명령인 #define 말고 상수표현식을 만들수있는 또 다른 방법이 있습니다 바로 그것은
열거형 상수를 이용하여 만드는 것이죠 사용형식은 이렇습니다.
enum { 상수명1[=상수], 상수명2 [=상수], ...) [변수명];
위에서 중괄호 []로 둘러싸인 부분은 없어도 되는 부분입니다. 만약 [=상수]부분이 없다면 컴파일러는 가장 먼저 나온 상수명1을
0으로, 상수명2는 (상수명1+1), 상수명3은 (상수명2+1) ...과 같이 상수명과 상수를 대응시킵니다.
그러나 [=상수] 부분이 있다면 해당 ㅏ상수와 상수명을 대응시킵니다.
그러면 열거형 상수를 이용하는 여러방법들을 알아보겠습니다.
01 enum { NAME1, NAME2, NAME3 };
02 enum { NAME! = 100, NAME2, NAME3 };
03 enum { NAME1 , NAME2 = 100, NAME3 };
04 enum { NAME1 = 100, NAME2 = 200, NAME3 = 300 };
01번째 줄은
-NAME1,NAME2,NAME3은 각각 상수 0,1,2 와 동일하다.
02번째줄은
-NAME1, NAME2, NAME3 은 각각 상수 100,101,102와 동일하다.
03번째줄은
-NAME1,NAME2,NAME3은 각각 상수 0, 100, 101과 동일하다.
04번째 줄은
-NAME1,NAME2,NAME3은 각각 상수 100,200,300과 동일하다.
이렇게 되는 것입니다.
이모든것이 여러분에게 도움이 되셧으면 합니다.
----------------------------------------------------------------------------
하아 .. 이번강의도 간신히 마쳣군요 솔직히 전 댓글을 보며 글을 씁니다.
왜냐하면 이 강의글을 쓴 목적히 어떠한 사람에게 도움을 주기 위해서이기 때문이죠.
어쨋든 이 길은 강의를 봐주셔서 감사합니다.
첫댓글 우왕ㅋ굳ㅋ
댓글을 남겨주셔서 감사합니다.
헐 이거슨 실시간댓글
내가 했던거잖앙... - ㅅ- 하지만 더 깔끔해 - ㅅ- 배아파 - ㅅ-
악플
좋은 댓글 감사합니다.그리고 하신거 해서 죄송합니다.
우왕ㅋ굳ㅋ 쩖 대단하심
선플
ㄳㄳ
배워갑니다
도움이 되셨길 바랍니다.
오오 고맙습니다
감사해요~
오오 고맙습니다
상수를 쓸때는 크게 두가지를 씁니다. const, #define 근데 보통 많이쓰는건 #define 를 많이쓰지요 그 이유는 const는 선언을 하기에 메모리가 쓰이지만, #define 는 메모리를 차지하지 않게때문입니다
const pawno에선 안되요 - ㅠ- 저번에 했다가 안되서 쫆..
좋은 말씀 감사합니다.
new const Test; 이런식으로 쓸수있지않음?
안되더군요 - ㅠ-...
맞는 말이긴 하다만 뭔가 좀 이상한데
..?
강의가 유행인가?
~_~ ?