작성
·
4.9K
0
안녕하세요. 혼자 다른 배열 예제를 풀어보다가 좀 이상한게 보여서 여쭙게 되었습니다.
이런식으로 코드 작성시 int a[10] 대신에, num을 10으로 고정시키고, int a[num]으로 선언을 해보았습니다. 그랬더니, 배열 a의 사이즈를 알 수 없다 라고 에러가 떳습니다. 그런데 조금 다르게 define 으로 넣어줘봤더니 에러가 사라지고 아무 문제없습니다. 뭐가 다른지 잘 모르겠습니다. const 로 할 때는 왜 안되는 건가요? (int a[num]에 대해 'a': unknown size라고 뜹니다.)
*질문 답변 뒤에 괜히 인사말 남기면 또 알람이 가서 귀찮으실까 감사인사말 안달고 있는데, 정말 감사히 배우고 있습니다. 감사하다는 말씀 꼭 드리고 싶습니다.
답변 3
3
안녕하세요.
배열의 크기는 컴파일타임에 결정되어야 합니다. 즉, 프로그램 실행 전, 반드시 컴파일 될 시기에 결정이 되어야 합니다.
#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
https://kid5.tistory.com/227
배열의 크기가 컴파일 타임에 결정되어야 하는 이유... 라는데 궁금하신 분들 읽어보세요 저는 아직 초보라 뭔소린지 한개도 모르겠습니다 ㅋㅋㅋ ㅠ
0