• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

배열크기 선언시 const int 로 된 값을 넣으면 안되나요?

21.02.08 03:08 작성 조회수 4.26k

0

안녕하세요. 혼자 다른 배열 예제를 풀어보다가 좀 이상한게 보여서 여쭙게 되었습니다.

이런식으로 코드 작성시  int a[10] 대신에, num을 10으로 고정시키고, int a[num]으로 선언을 해보았습니다. 그랬더니, 배열 a의 사이즈를 알 수 없다 라고 에러가 떳습니다. 그런데 조금 다르게 define 으로 넣어줘봤더니 에러가 사라지고 아무 문제없습니다. 뭐가 다른지 잘 모르겠습니다. const 로 할 때는 왜 안되는 건가요? (int a[num]에 대해 'a': unknown size라고 뜹니다.)

*질문 답변 뒤에 괜히 인사말 남기면 또 알람이 가서 귀찮으실까 감사인사말 안달고 있는데, 정말 감사히 배우고 있습니다. 감사하다는 말씀 꼭 드리고 싶습니다. 

답변 3

·

답변을 작성해보세요.

3

안소님의 프로필

안소

2021.02.08

안녕하세요. 

배열의 크기는 컴파일타임에 결정되어야 합니다. 즉, 프로그램 실행 전, 반드시 컴파일 될 시기에 결정이 되어야 합니다.

#define 을 배열 크기에 대응시키는건 컴파일타임에 이루어지지만, const 상수는 런타임에 결정됩니다.

즉, const int a = 2 라는 상수가 있다면 프로그램이 실행 되어야지만 2라는 값이 a에 저장된다는 것입니다. 

따라서 C언어에서는 const 상수로 배열의 크기를 결정할 수 없습니다! C언어에서는 const 상수가 "런타임 상수"이기 때문입니다.

그래서 컴파일 타임때는 a에 어떤 값이 아직 들어오지 못한 상태이기 때문에 unknown size라고 에러가 떴었던 것입니다. 

(여담으로 C++에서는 const 가 경우에따라 컴파일 상수가 될 수도, 런타임 상수가 될 수도 있기 때문에 C++에서는 const 상수로 배열 크기를 선언하는 것이 가능합니다.)

https://www.inflearn.com/questions/135444

위 링크에도 비슷한 답변을 드린적이 있습니다. 참고 해주세요!

(전혀 안귀찮습니다...💛 인사말 댓글 주시면 기분 좋거든요! 덕담 감사합니다.) 

0

정진호님의 프로필

정진호

2024.02.23

https://kid5.tistory.com/227
배열의 크기가 컴파일 타임에 결정되어야 하는 이유... 라는데 궁금하신 분들 읽어보세요 저는 아직 초보라 뭔소린지 한개도 모르겠습니다 ㅋㅋㅋ ㅠ

0

ZIOMIN님의 프로필

ZIOMIN

2021.07.18

와 질문을 올린 사람은 아니지만 정말 감사드립니다