디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

C++ 초보를 위한 강좌. 6. 상수에 대해 한가지 짚고 넘어가자.

codesafer갤로그로 이동합니다. 2016.10.15 00:46:06
조회 1834 추천 7 댓글 29

우리가 흔히


int a = 3;


이런 표현을 쓴다면, 우측의 3은 말 그대로 ( literally ) 상수다.

변하지 않는 값이란 말이지. 고수의 유의어는 아니다. ( 퍽~ )


이런 상수를 literal constant. 리터럴 상수 라고 부른다.

만약 당신이 literal constant 를 선언하고 싶다면, 변수의 선언 표현앞에 const 를 붙여주면 된다.


const int c = 3;


처럼 말이다.



우리는 ( 크기가 고정인 ) 배열의 크기를 표현하기 위해 리터럴 상수를 쓸 수 있고,


int arr[ 5 ];


처럼 표현했다.


따라서 당연히,


const int array_size = 5;

int arr[ array_size ];


도 정상적인 문법이다.



하지만 좀 특이한 경우가 있는데, 우리는 변수를 임시로 고정해서 상수 처럼 쓸 수 있다는 것이다.


int input;        // input 은 정수형 변수다.

cin >> input;     // 키보드 입력을 통해 값을 얻었다.


int arr[ input ];


이건 당연히 컴파일이 안된다. 컴파일러가 상수가 필요합니다! 하겠지.



그런데,


const int array_size = input;

int arr[ array_size ];


위의 코드처럼 변수를 상수에 보관시켜서 사용하면 어떻게 될까?



GCC 에서는 컴파일이 된다.

VC++ 에서는 컴파일이 되지 않는다.


GCC 가 훨 상수에 대해 유연하다. ( VC++ 은 아직 표준으로 부터 멀고 먼~ )

하지만, GCC 의 경우에도 template 의 인자로 전달할 때는 임시 고정 상수를 사용할 수 없다.

심지어 태생이 리터럴 상수라 하더라도, 전달 과정에 변수를 한 번만이라도 거치면 리터럴 상수 취급을 받지 못한다는 것이다.

( 이건 어쩔 수 없다. 몰래 다른 쓰레드에서 포인터로 전달 과정에 있는 변수를 슥~ 건들면 사실 상수가 아니잖아 )


즉, 나는 상수의 종류를 리터럴 상수와 임시 고정 상수로 정의하되,

GCC 의 경우 임시 고정 상수를 이용한 배열의 크기 설정이 가능하다라고 해석한다.

개념적으로 3단계로 분류해도 되겠지만, 아캄의 면도날 원칙을 따르겠다.

그렇다고 표준 찾아보는것도 따분하니 패스.


컴파일러 마다 사뭇 다를 때, 특정 컴파일러를 대상으로 작성할지,

보다 많은 컴파일러의 식성을 고려해 작성할지는 여러분의 선택이다.



참고.


리러털 상수는, 대표적인 예로 리터럴 문자열 상수 ( "Hello world" 처럼 따옴표로 표기한 문자 그대로의 상수 문자열 )

의 경우와 마찬가지로 실행파일이 실행된 메모리 상의 리터럴 영역에 저장되게 된다.

이 영역은 읽기 전용이다. ( 몇 몇 과거 컴파일러에선 쓰기가 가능한 경우도 있다. )

따라서 런타임에 리터럴 저장소인 메모리에 접근해서 문자열을 바꾸려고 시도하면 런타임 오류를 만나게 된다.

( 물론 컴파일러 최적화에 의해 아예 code 영역에 박혀버리는 경우도 있다 )


추천 비추천

7

고정닉 0

1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 며느리, 사위되면 시댁, 처가에 잘할 것 같은 스타 운영자 25/10/13 - -
공지 프로그래밍 갤러리 이용 안내 [96] 운영자 20.09.28 47984 65
2896779 안년하세요, 프로그래밍을 처음 시작하려는 사람입니다! 사피엔스갤로그로 이동합니다. 15:13 8 0
2896778 내가 느끼는 AI가 잘하고 못하는거 ㅆㅇㅆ(124.216) 15:07 8 0
2896777 AI 써보면 내가 느낀게 최대 클래스 하나까지 작성해야함 ㅆㅇㅆ(124.216) 14:54 14 0
2896776 여러분은 새 API 써야할 때 어떻게 하나요?? [1] 프갤러(120.142) 14:53 19 0
2896775 어느순간 AI랑 싸우고 있음 [1] ㅇㅇ갤로그로 이동합니다. 14:50 33 0
2896774 하도 긴장하니까 평온액 먹고 갔는디 [1] 무관갤로그로 이동합니다. 14:49 14 0
2896773 [애니뉴스] 소설 사이트 개발 프갤러(121.172) 14:45 7 0
2896772 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 14:24 13 0
2896771 코딩 ai ChatGPT 는 코드 복사해서 붙여넣기 ㅇㅇ(218.234) 14:13 20 0
2896770 [간절한요청] IT기업 직원 관련 설문 프갤러(39.7) 13:53 22 0
2896769 나 고민중 도움바람 [3] 프갤러(211.234) 13:34 36 0
2896768 일본 it 가면 망함? [3] 프갤러(106.102) 13:30 38 0
2896767 gpt 섹톡기능 오픈한댑니다. [2] 프갤러(218.154) 13:29 37 0
2896766 코딩에 ai 쓰지 말아야 하는 이유 프갤러(218.154) 13:25 32 0
2896763 나는 뉴비일수록 ai 알려줘야겠던데 [4] ㅆㅇㅆ(124.216) 13:07 51 0
2896762 뉴비들은 기초가 없는데 AI를 쓰는건 좀 비추 [1] 루도그담당(58.239) 13:01 41 0
2896761 근데 AI가 코딩 짜면 더 잘짜지 않냐. [2] ㅆㅇㅆ(124.216) 12:57 56 0
2896760 캄보디아말고 핑보디아는 없냐 [4] 루도그담당(58.239) 12:55 44 0
2896759 나중에 1000억정도 생기고 캄보디아같은 사건 생기면 내가 처리해줄생각임 ㅇㅇ(223.39) 12:50 17 0
2896758 근데 교수가 빡칠만 하네 [4] 루도그담당(58.239) 12:50 52 0
2896757 아는 지인 통해서 대화하다보니까 [6] 루도그담당(58.239) 12:46 51 0
2896756 이런 문장 되게 멋지지 않니 ㅇㅇ갤로그로 이동합니다. 12:45 27 0
2896755 애새끼까는 중국인들혜택 더 주는 좇병신나라 ㅋㅋㅋ 타이밍뒷.통수한방(1.213) 12:32 15 0
2896754 이번에 외주가 구문 도표 그리는건데 오랜만에 컴파일러 이론보는데 [2] ㅆㅇㅆ(124.216) 12:25 37 0
2896753 5억도 못벌어노면 사람새끼아닌거 팩트아님???ㅋㅋㅋ [3] 타이밍뒷.통수한방(1.213) 12:06 35 0
2896752 Wake up, Neo . . . [1] choi(125.184) 11:59 21 0
2896751 http와 https, 과연 https를 이용하는 것이 맞을까? 프갤러(121.172) 11:37 35 0
2896750 Za받았다. 넥도리아(223.38) 11:32 28 0
2896749 새싹(SeSAC) NEXT AI : 실전형 데이터 엔지니어링 코스 도봉캠 프갤러(14.32) 11:22 18 0
2896748 개발하다 정치병 왔어 [2] chironpractor갤로그로 이동합니다. 10:50 54 0
2896747 Chatter BBS 오픈 [3] 파란빤스갤로그로 이동합니다. 10:38 41 0
2896746 퇴사고민 [3] ㅇㅇ(222.117) 10:18 52 0
2896743 중국인들 길에서 똥싸는거 [3] 루도그담당(211.184) 09:40 54 0
2896742 애플의 G시리즈는 5가 끝이었는데 M 시리즈는 몇이 끝일까? ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 09:28 32 0
2896741 유튜브 이제 다시 되네 ㅇㅅㅇ [2] chironpractor갤로그로 이동합니다. 09:19 45 0
2896740 우산 말리는 중..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09:18 20 0
2896738 뒷모습 도촬 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 09:07 47 0
2896737 유튜브 지금 나만 이러는건 아닌가보네 chironpractor갤로그로 이동합니다. 09:06 28 0
2896736 콜롬비아 납치사건 보면서 가난의 늪을 느꼈어... [1] ㅇㅇ(223.39) 09:05 25 0
2896735 유튜브 안 되는거 CDN 문제겠지? [2] 프갤러(14.32) 09:01 39 0
2896734 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08:55 21 0
2896732 인지과학조져라 손발이시립디다갤로그로 이동합니다. 07:17 36 0
2896729 30대 문과 한미 이중국적자 it나 인공으로 빅테크취업하는법좀요 ㅇㅇ(59.23) 06:47 42 0
2896726 IT 쪽 프리랜서 가능한 직업 뭐 있지 [4] 프갤러(67.162) 02:50 62 0
2896725 와 한국인 가술력 개쩐다 ㄷㄷ ㅇㅇ(106.101) 02:20 63 0
2896724 만약에 캄보디아에서 이재용 아들 납치되면 무슨일 벌어짐 ?? [1] ㅇㅇ(223.39) 02:11 77 0
2896720 그냥 갑자기 궁금한건데 캄보디아 사람하나 빼내오는게 힘든일임?? [1] ㅇㅇ(223.39) 00:50 47 0
2896717 반대로 생각할 줄 알아야한다. 프갤러(110.8) 00:37 70 0
2896715 번역은 중국모델이 제일 좋음. 이유가 [4] ㅆㅇㅆ(113.192) 00:24 68 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2