반응형
나는 원래 배열을 선언할 때 길이를 무조건 컴파일 타임 상수로 써야한다고 알고 있었고 그렇게 사용해오고 있었다.
하지만 개발하다보니 코드 낭비가 심했다. (쓸데없이 동적 할당을 하거나, 포인터 배열을 동적으로 사용하고 싶을 때 등)
코드를 낭비하는 것을 해결하고 싶어서 혹시나 하는 마음에 사용해보니 오류가 뜨지 않고 잘 사용되었다.
컴파일은 리눅스에서 하다보니 당연하게도 GCC를 사용하여 컴파일 했었는데 되는 이유를 찾아보니...
C99 부터 가변길이배열(VLA)를 지원 한다는 것이였다!!
VLA란 배열의 크기를 컴파일할 때 정하지 않고 실행하면서 정할 수 있도록 하는 기능이다.
VLA의 특징과 malloc과의 차이점에 대해서 말해보자면
malloc | VLA |
보통 힙에 저장된다. | 보통 스택에 저장된다. |
긴 배열에 적합하다 | 짧은 배열에 적합하다. |
free, 메모리 관리 필수 굉장히 수동적이다. | 사용자가 편하고 자동적이다. |
하지만 이 기능은 스택오버플로우의 위험이 있어 지원하지 않는 컴파일러도 있는데 그 예로,
Visual Stdio의 컴파일러인 vc++컴파일러는 VLA기능을 사용하지 못한다.
하지만 GCC를 기본 컴파일러로 제공하는 JetBrain사의 CLion IDE를 사용하여 컴파일 해보면...
가변길이배열을 사용하고 싶다면 직접 GCC나 지원하는 컴파일러를 설치하여 컴파일을 후 사용하도록 하자.
똑같은 코드인데도 컴파일러에 따라 되는 문법이 있고 안되는 문법이 있다. 동작하는 것에 집중하지 말고 동작하는 환경에 대해서도 공부할 필요가 있겠다.
VS말고 CLion도 사랑해주세요!!
반응형
'C > C언어 문법' 카테고리의 다른 글
CLion 파일 표준 입출력 fopen, fgets 안될 때 해결 방법 (0) | 2022.03.30 |
---|---|
C언어 2차원 배열 동적으로 사용하기 (0) | 2022.03.30 |
C언어 argument와 parameter의 차이점, 그리고 argc, argv main함수의 파라미터의 대하여 (0) | 2022.03.20 |
CLion 한글 깨짐 해결 방법 (1) | 2022.03.07 |
최근댓글