디시인사이드 갤러리

최근 방문

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

갤러리 본문 영역

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

*루비*갤로그로 이동합니다. 2025.03.20 09:07:52
조회 79 추천 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

댓글 영역

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

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 팬덤 때문에 오히려 여론이 나빠진 스타는? 운영자 25/03/17 - -
2833051 성수동에 꽤 큰 업무지구가 있구나 [5] 딱님갤로그로 이동합니다. 03.21 54 0
2833050 ai로 게임개발 가능함? [2] ㅇㅇ(223.39) 03.21 58 0
2833049 기초적인 회로랑 전자이동, 다이오드 배우는 중인데 도움좀 줄사람 ㅇㅇ(223.38) 03.21 23 0
2833048 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 03.21 32 0
2833047 나님 클라이밍장으로 출근 중~ 딱님갤로그로 이동합니다. 03.21 37 0
2833046 OrderedDictionary라는 기묘한 물건이 있구나 [1] 딱님갤로그로 이동합니다. 03.21 41 1
2833045 미국은 윤정부 쿠데타 알고 있었다! 발명도둑잡기갤로그로 이동합니다. 03.21 32 0
2833044 와 시발 오늘 눈코뜰새없이 바쁘노 [2] ㅆㅇㅆ찡갤로그로 이동합니다. 03.21 47 0
2833043 llm 사용하면서 희망 생김. [3] *루비*갤로그로 이동합니다. 03.21 55 0
2833042 나님 더클라임 성수로 행선지를 최종 결정하시다 [2] 딱님갤로그로 이동합니다. 03.21 28 0
2833041 내가 최신 에뮬게임기가 별 필요가 없는 이유 [2] 발명도둑잡기갤로그로 이동합니다. 03.21 35 0
2833039 클라이밍하러 홍대갈까 성수갈까 고민 중이시다 [1] 딱님갤로그로 이동합니다. 03.21 108 0
2833038 한 십년 지나면 챗지피티가 존대말로 안물어보면 씹겠군 발명도둑잡기갤로그로 이동합니다. 03.21 28 0
2833037 공장전문 소일거리 갓샵개발자 일합니다 ㅇㅅㅇ [2] 강유현갤로그로 이동합니다. 03.21 120 0
2833035 리액트 개념은 어느정도 봤는데 퍼블은 몬 하겠다 ㅇㅅㄴ [3] 강유현갤로그로 이동합니다. 03.21 55 0
2833034 이제 pc의 시대는 끝나고 모바일의 시대다 [7] 헬마스터갤로그로 이동합니다. 03.21 86 0
2833033 챗티씨 말투가 좀 이상한것 같은데 [1] 헬마스터갤로그로 이동합니다. 03.21 49 0
2833032 나님 팀홀튼 샌드위치 허바허바 [2] 딱님갤로그로 이동합니다. 03.21 46 0
2833031 Ai는 거리재는거 잘못함? [3] ㅇㅇ(211.246) 03.21 59 0
2833030 C# 딕셔너리의 SKIP, TAKE? [31] 프갤러(121.174) 03.21 127 0
2833029 [단독]"스톱더스틸 책 비치 안하면 CIA 신고" 도서관들 홍역 발명도둑잡기갤로그로 이동합니다. 03.21 24 0
2833028 어느 엄마가 SNS 업로드 멈춘 충격적 이유... 발명도둑잡기갤로그로 이동합니다. 03.21 28 0
2833027 J.K. 롤링 "해리포터 배우들이 영화 망쳤다" 발명도둑잡기갤로그로 이동합니다. 03.21 32 0
2833026 층간소음, 사이버 레커… 영화 단골 소재된 씁쓸한 일상 발명도둑잡기갤로그로 이동합니다. 03.21 25 0
2833025 "전두환 계엄으로 학살 겪은 한국…민주주의 후퇴 원인은 계엄령 시도" 발명도둑잡기갤로그로 이동합니다. 03.21 23 0
2833024 집에 누워 숨만 쉬어도 ‘돈이 든다’ [소비자물가 리포트-주(住)③] 발명도둑잡기갤로그로 이동합니다. 03.21 29 0
2833023 목숨 건 비행, 흑산도민들이 위험하다 발명도둑잡기갤로그로 이동합니다. 03.21 22 0
2833022 본질 외면한 채 탐욕 부린 결과 : 저축은행 '부실의 늪' 발명도둑잡기갤로그로 이동합니다. 03.21 24 0
2833021 유행하는 ‘이 다이어트’ 하던 美인플루언서 “소변에 피 섞여 나왔다” 발명도둑잡기갤로그로 이동합니다. 03.21 28 0
2833020 종말의 날 감방서 자고 있었다…'휴거' 그 교주의 비밀 발명도둑잡기갤로그로 이동합니다. 03.21 26 0
2833019 ppt 만들어주는 ai 있음? 프갤러(211.210) 03.21 27 0
2833018 조선인은행복 덜느끼는 유전자탑재 ㅇㅇ(211.219) 03.21 30 0
2833017 친구가 독화살을 맞아서 뼈를 긁어내야 하는데 의사면허 없음 하면안되는겨? [1] ㅇㅇ(223.38) 03.21 43 0
2833016 워드프레스 해킹잘당하는데 누구큰일났네 [5] ㅇㅇ(211.219) 03.21 45 0
2833015 젠슨황 "양자컴 기업 상장된 줄 몰랐다, 미안하 [2] ㅇㅇ(211.219) 03.21 52 0
2833014 자살충동이 드는 사람의 뇌 발명도둑잡기갤로그로 이동합니다. 03.21 33 0
2833013 바다의 깊이 알아보자 발명도둑잡기갤로그로 이동합니다. 03.21 26 0
2833012 추후엔 주석도 안쓰는 코딩이 올것만같음 [3] 프갤러(211.210) 03.21 45 0
2833011 llm으로 글써서 다국어 블로그 도배해야지 *루비*갤로그로 이동합니다. 03.21 23 0
2833010 음 나님 아침 겸 점심~ [1] 딱님갤로그로 이동합니다. 03.21 38 0
2833009 c/c++ 표기 글 몇년 전에 삭제 후 이번에 재업했는데 ㅎㅎ [1] *루비*갤로그로 이동합니다. 03.21 46 2
2833008 나님 연차내고 스케일링 받고 카페 도착~ 딱님갤로그로 이동합니다. 03.21 28 0
2833007 프론트엔드라는게 웹 한정으로 쓰는 말은 아니지않음 ㅇㅅㅇ? [2] 강유현갤로그로 이동합니다. 03.21 54 0
2833006 워드프레스가 다국어 사이트 지원하네 ㅎㅎ *루비*갤로그로 이동합니다. 03.21 22 0
2833005 어떤 악질은 글삭하면 복사해서 재업하더라 [6] 프갤러(211.210) 03.21 57 0
2833003 노상원의 지시, ‘선관위 장악’ 메모 입수 발명도둑잡기갤로그로 이동합니다. 03.21 26 0
2833002 해외글 보는데 20달러 모델은 클로드가 압도적인듯 ㅆㅇㅆ찡갤로그로 이동합니다. 03.21 30 0
2833001 si 출장이나 파견 <- 대중 교통 이용해도 됨 ? [7] 프갤러(121.136) 03.21 73 0
2832999 "'너처럼 멍청한 애 처음' 상사 막말에 우울증 생겼는데…본인 결혼식 초 [2] 발명도둑잡기갤로그로 이동합니다. 03.21 47 0
2832998 英 신경학자, ‘이 방법’ 추천… 활력 증진에 최고 발명도둑잡기갤로그로 이동합니다. 03.21 28 0
뉴스 “우리 아빠야”… 박형식, 출생 비밀 드러났다→ 순간 시청률 14.7% (보물섬) 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2