디시인사이드 갤러리

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

갤러리 본문 영역

LLM) C 언어 const 보고가~~ 싫음 말구

*루비*갤로그로 이동합니다. 2025.03.20 09:07:52
조회 54 추천 2 댓글 7

 

const

const는 C 언어에서 불변(immutable)을 보장하는 핵심 키워드로, 변수나 데이터가 의도치 않게 수정되는 것을 방지하는 역할을 합니다. 이 개념은 코드의 안전성과 명확성을 높이며, 특히 대규모 시스템이나 라이브러리를 작성할 때 중요한 역할을 합니다. 아래에서는 다양한 상황에서 const가 어떻게 사용되는지, 그리고 왜 유용한지에 대해 자세히 설명하겠습니다.

기본 개념

불변성 보장: const로 선언된 변수는 초기화된 후 값이 변경되지 않습니다. 컴파일러는 읽기 전용 변수에 대한 수정 시도를 오류로 처리하여, 실수나 의도치 않은 부작용을 줄여줍니다.

가독성과 유지보수: 데이터가 실수로 변경되지 않도록 명시적으로 표현함으로써 코드의 의도를 더 명확하게 이해할 수 있습니다.

최적화 기회: 컴파일러는 const로 선언된 데이터가 변경되지 않는다는 정보를 활용하여 최적화를 진행할 수 있습니다. 예를 들어, 글로벌 const 변수는 읽기 전용 메모리 영역에 저장될 수 있습니다.

기본 사용 예시

상수 변수 선언

#include <stdio.h>

int main(void) {
    const int MAX_SIZE = 100;
    
    // MAX_SIZE = 200;  // 오류: const 변수는 수정할 수 없음.
    
    printf("MAX_SIZE는 %d 입니다.\n", MAX_SIZE);
    return 0;
}

위 예제에서 MAX_SIZE는 초기값 100으로 설정되며, 이후 변경이 불가능합니다. 전처리기#define MAX_SIZE 100와 달리, const 변수는 타입 체킹이 이루어지므로 타입 안정성을 보장합니다.

포인터와 const의 조합

const는 포인터와 결합할 때 다양한 의미를 가집니다. 크게 두 가지 경우가 있습니다.

  1. 포인터가 가리키는 대상의 데이터(*ptr)가 변경 불가능한 경우
  2. 포인터 변수(ptr) 자체가 변경 불가능한 경우

데이터 상수 (Pointer to Constant)

형태: const int* ptr; 또는 int const* ptr;
의미: 포인터를 통해 접근하는 데이터(*ptr)는 읽기 전용이며, 수정이 금지됩니다. 단, 포인터 자체(ptr)는 다른 주소를 가리킬 수 있습니다.

#include <stdio.h>

int main(void) {
    int num = 42;
    const int *p = #  // 또는 int const *p = #

    // *p = 100;  // 오류: p를 통해 접근하는 데이터는 변경할 수 없음.
    
    int num2 = 84;
    p = &num2;   // OK: 포인터 p 자체는 다른 주소를 가리킬 수 있음.
    
    printf("*p = %d\n", *p);
    return 0;
}

상수 포인터 (Constant Pointer)

형태: int* const ptr;
의미: 포인터 변수 자체가 상수여서 다른 주소(ptr)를 가리킬 수 없지만, 가리키는 데이터(*ptr)를 수정하는 것은 가능합니다.

#include <stdio.h>

int main(void) {
    int num = 42;
    int *const p = #  // p는 반드시 num의 주소를 가리켜야 함.

    *p = 100;  // OK: p가 가리키는 데이터를 변경하는 것은 허용.
    
    // int num2 = 84;
    // p = &num2;  // 오류: p는 상수 포인터이므로 다른 주소를 가리킬 수 없음.
    
    printf("num = %d\n", num);
    return 0;
}

상수 포인터를 통한 상수 데이터 (Const Pointer to Const Data)

형태: const int* const ptr;
의미: 포인터 자체와 포인터가 가리키는 데이터 모두 변경할 수 없습니다.

#include <stdio.h>

int main(void) {
    int num = 42;
    const int *const p = #

    // *p = 100;  // 오류: 데이터는 수정할 수 없음.
    // p = &another;  // 오류: 포인터 자체도 다른 주소를 가리킬 수 없음.
    
    printf("*p = %d\n", *p);
    return 0;
}

const의 활용 예

함수 매개변수: 읽기 전용으로 사용될 값들을 함수 인자로 전달할 때 const를 사용하면, 함수 내부에서 원본 데이터가 변경되는 것을 방지할 수 있습니다. 함수의 의도가 “읽기 전용”임을 명시적으로 나타냅니다.

#include <stdio.h>

// 배열의 내용을 수정하지 않음을 보장
void printValues(const int* array, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
        // array[i] = 0;  // 오류 발생: const로 인해 수정 불가
    }
    printf("\n");
}

int main(void) {
    int numbers[] = {1, 2, 3, 4, 5};
    printValues(numbers, 5);
    return 0;
}

인터페이스 명확화: API 설계 시, 입력 데이터나 내부 상태가 수정되지 않도록 보장하는 용도로 사용하면, 사용자는 해당 데이터가 안전하다는 것을 알 수 있습니다.

읽기 전용 글로벌 상수: 전역에서 자주 사용되는 상수 값들은 const로 선언하여, 의도치 않은 변경을 막을 수 있습니다.

최적화에 도움: 컴파일러가 const로 선언된 데이터를 변경하지 않는다고 보장할 수 있기 때문에, 최적화 측면에서 내부적으로 도움을 받을 수 있습니다.

상수 표현식과 초기화: C에서는 const 변수도 초기화 시 반드시 값이 할당되어야 합니다. (만약 초기화 없이 선언되면, 그 값은 예측할 수 없고 컴파일러에 따라 경고 또는 오류가 발생할 수 있습니다.)

주의사항

const는 엄격하게 값이 변경되지 않음을 보장하지만, 포인터를 사용하는 상황에서는 다른 변수에 대한 간접적인 접근을 통해 값을 수정할 위험이 있으므로 올바른 사용법에 주의해야 합니다.

추천 비추천

2

고정닉 0

1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 팬덤 때문에 오히려 여론이 나빠진 스타는? 운영자 25/03/17 - -
공지 프로그래밍 갤러리 이용 안내 [87] 운영자 20.09.28 42519 64
2832713 한덕수 총리 먼저 판결에 종북내란당 발작 ♥냥덩이♥갤로그로 이동합니다. 17:51 5 0
2832712 정보) 프리랜서 개발자들은 굳이 개인사업자 등록하지 마라 ㅇㅅㅇ 강유현갤로그로 이동합니다. 17:48 19 0
2832711 오늘 리액트 공부 안 하고 미러스엣지만 해버림 ㅇㅅㅇ [4] 강유현갤로그로 이동합니다. 17:43 19 0
2832710 집에 노는 구형 노트북이 있어서 리눅스깔아볼라고 하는데 [2] 프갤러(180.66) 17:41 15 0
2832709 은하수 식당 프차 돈까스 맛있네 ㅆㅇㅆ찡갤로그로 이동합니다. 17:39 11 0
2832708 나는 내일부터 금연한다. 얼마나 좆같고 힘들든 담배는 안핀다. ㅇㅇ(220.119) 17:37 6 0
2832707 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 17:36 7 0
2832706 오늘 아무래도 닭의 생명을 앗아가야할것같다 [3] 헬마스터갤로그로 이동합니다. 17:32 21 0
2832705 요즘 시기에 지방에서 퇴사하면 [2] ㅇㅇ(117.111) 17:30 15 0
2832704 테일윈드 여려명이서 건들여놓으니 개판오분전이네 [2] ㅇㅇ갤로그로 이동합니다. 17:29 20 0
2832703 가카가 승천하는 휴거가 오십니다 발명도둑잡기갤로그로 이동합니다. 17:20 7 0
2832702 탄핵 경마와 오징어 게임 경마 발명도둑잡기갤로그로 이동합니다. 17:18 6 0
2832701 리죄명도 결국 박원숭 꼴 나겠군 ♥냥덩이♥갤로그로 이동합니다. 17:16 9 0
2832700 남자 졸업 27살이면 평균임? ㅇㅇ(211.234) 17:02 19 0
2832699 요즘 집중이 너무안된다 [3] ㅇㅇ(113.59) 17:00 26 0
2832698 행님들 국비보니깐 나이 많은 분들 많던데.. [8] 프갤러(211.196) 16:56 80 0
2832697 퇴근한다 [2] ㅆㅇㅆ찡갤로그로 이동합니다. 16:53 26 0
2832696 데이터가 많이 나와요. 도리스아(112.170) 16:50 16 0
2832695 [축]국민강사 전한길쌤 극좌 가짜뉴스 고발하는 언론사 창간 ♥냥덩이♥갤로그로 이동합니다. 16:48 20 0
2832694 대기업 일은 거의다 하청업체 관리감독인듯 [1] 프갤러(220.88) 16:45 18 0
2832693 [국가재난] 내란수괴 찢재명 30마리 발생 여성들은 강철팬티 구비해야 ♥냥덩이♥갤로그로 이동합니다. 16:44 17 0
2832692 헌재 '탄핵반대' 시위대 일부 강제해산...경찰 "불법집회" 발명도둑잡기갤로그로 이동합니다. 16:39 13 0
2832691 [샷!] "한국 자살률, 공중보건 국가비상사태" 발명도둑잡기갤로그로 이동합니다. 16:34 10 0
2832690 “이재명 쏘고 죽겠다는 김건희, 왕조시대면 사약 받을 일” 발명도둑잡기갤로그로 이동합니다. 16:30 10 0
2832689 리죄명 전국민 앞에서 깡패본색 협박발언에 민주당 내분 ♥냥덩이♥갤로그로 이동합니다. 16:28 15 0
2832688 쓰레기봉투가 260만원?…구찌 디자이너 파격 영업에 '술렁' 발명도둑잡기갤로그로 이동합니다. 16:26 10 0
2832687 사기 정치선동꾼 1위 극좌 내란수괴 리죄명 ㅇㅅㅇ ♥냥덩이♥갤로그로 이동합니다. 16:17 22 0
2832686 퇴근하고 부업으로 뛸만한거 있을까 [2] 프갤러(114.205) 16:16 25 0
2832685 하나은행 직원이 웃고 다닌 까닭...평균연봉 1억2천만원 발명도둑잡기갤로그로 이동합니다. 16:13 42 0
2832684 전 회사새끼들 NDA 뜻은 알고 서명하는건가 강유현갤로그로 이동합니다. 16:12 39 0
2832683 내일도 선고일 안나온다 발명도둑잡기갤로그로 이동합니다. 16:07 18 0
2832682 프리 최종계약서 받았다 ㅇㅅㅇ [8] 강유현갤로그로 이동합니다. 16:02 64 0
2832681 프갤문학 너무 마음아픔 ㅇㅅㅇ [8] 강유현갤로그로 이동합니다. 16:00 69 0
2832680 [자유 대한민국] - 사이버 위협 카테고리 생성- 프갤러(121.172) 15:57 24 0
2832679 ㅆㅇㅆ아는거 많긴한데 완성못할듯 [3] ㅇㅇ(118.235) 15:55 41 0
2832678 아스카 좆댔다 [5] 아스카영원히사랑해갤로그로 이동합니다. 15:52 53 0
2832677 최상목 미르재단 '공소시효' 언급한 민주당 발명도둑잡기갤로그로 이동합니다. 15:52 10 0
2832676 25살 초봉.. [6] ㅇㅇ(175.211) 15:50 49 0
2832675 [단독] 검찰, 오세훈 서울시장 집무실·공관 압수수색 발명도둑잡기갤로그로 이동합니다. 15:44 11 0
2832674 백준 0명 푼 문제 chatgpt [3] 프갤러(118.235) 15:41 40 0
2832673 잘나가는 자격증 뭔가 봤더니 [1] 발명도둑잡기갤로그로 이동합니다. 15:36 25 0
2832672 '북한강 시신유기' 양광준 무기징역…"비인격적 범행 반성 의문" 발명도둑잡기갤로그로 이동합니다. 15:32 16 0
2832671 [자유 대한민국] 지역별 카드와 이권 놀음 프갤러(121.172) 15:23 19 0
2832670 인지과학조져라 손발이시립디다갤로그로 이동합니다. 15:23 18 0
2832669 게임 개발 [8] 배구공(119.202) 15:11 66 0
2832668 서로 다른 그래픽카드 2개 ㄱㄴ? 프갤러(210.91) 15:10 22 0
2832667 너희들은 저절로 유명해진다 발명도둑잡기갤로그로 이동합니다. 15:02 24 0
2832666 ‘출소’ 황철순, 아내 사생활 폭로 “허구한 날 술자리·男과 파티” 발명도둑잡기갤로그로 이동합니다. 15:01 31 0
2832665 윤석열 복귀하면 '2차 계엄 선포할 것' 55.1% 발명도둑잡기갤로그로 이동합니다. 14:46 24 0
뉴스 황동주, 이영자와 간식 취향까지 똑같네... 진짜 속마음은? (전참시) 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2