편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
97번째 줄: | 97번째 줄: | ||
stdbool.h : 표준 bool 타입을 제공한다. | stdbool.h : 표준 bool 타입을 제공한다. | ||
사실 C99 에 새로 탑재된것은 _Bool 타입이다. 하지만, stdbool.h 를 include 할 경우, 그냥 bool 로도 사용이 가능해진다. 왜 이런식으로 했냐면, 기존 표준에 bool 이 없었기때문에 이 이름을 사용한 코드가 있을 경우를 고려하여, 기존 표준에서 사용하지 말라고 했던 밑줄+대문자로 시작하는 이름인 _Bool 로 만들어놓았고, 여기에 해당되지 않는 경우는 보다 평범한 이름인 bool 로 사용하라고 stdbool.h 를 | 사실 C99 에 새로 탑재된것은 _Bool 타입이다. 하지만, stdbool.h 를 include 할 경우, 그냥 bool 로도 사용이 가능해진다. 왜 이런식으로 했냐면, 기존 표준에 bool 이 없었기때문에 이 이름을 사용한 코드가 있을 경우를 고려하여, 기존 표준에서 사용하지 말라고 했던 밑줄+대문자로 시작하는 이름인 _Bool 로 만들어놓았고, 여기에 해당되지 않는 경우는 보다 평범한 이름인 bool 로 사용하라고 stdbool.h 를 추가한것. stdbool.h 을 사용할 경우 추가적으로 true 와 false 도 사용이 가능하다. | ||
====지정된 이니셜라이저 지원==== | ====지정된 이니셜라이저 지원==== | ||
414번째 줄: | 414번째 줄: | ||
메모리의 구조는 크게 5개의 영역으로 나뉜다. CODE, DATA, BSS, HEAP, STACK | 메모리의 구조는 크게 5개의 영역으로 나뉜다. CODE, DATA, BSS, HEAP, STACK | ||
일단 이것을 두개로 쪼개면 컴파일시 결정되는 CODE, DATA, BSS(CODE는 프로그램의 코드, DATA,BSS는 전역변수와 문자열 static 변수들이 저장된다. 완전히 | 일단 이것을 두개로 쪼개면 컴파일시 결정되는 CODE, DATA, BSS(CODE는 프로그램의 코드, DATA,BSS는 전역변수와 문자열 static 변수들이 저장된다. 완전히 정확한것은 아니지만 ROM영역이라 실행 이후에는 접근 권한이 없다고 생각 하면 된다.) | ||
실행 하는 동안에(Run time동안에)결정되는 HEAP, STACK 그리고 (stack은 지역변수들이 저장되고, HEAP은 동적 메모리이다. 이곳은 RAM영역이다.) | 실행 하는 동안에(Run time동안에)결정되는 HEAP, STACK 그리고 (stack은 지역변수들이 저장되고, HEAP은 동적 메모리이다. 이곳은 RAM영역이다.) | ||
일단, 첫번째 소스가 왜 작동이 잘되는 이유를 알아보자. 일단 문자열은 DATA영역에 컴파일이 되면서 먼저 기록되고, char array는 main함수 안에 있으므로 stack영역에 들어있다. char array는 실제 메모리의 연속된 덩어리 이므로 여기에 DATA영역에 있던 문자열을 그대로 복사하는 것이다. 그렇기에 실제 "hello? librewiki!\n" 라는 문자열은 지금 stack 과 data 영역 모두에 존재라게 된다. 그렇기에 str[5]= '!'; 이런식으로 접근하여 수정해도 아무런 오류가 없다. | 일단, 첫번째 소스가 왜 작동이 잘되는 이유를 알아보자. 일단 문자열은 DATA영역에 컴파일이 되면서 먼저 기록되고, char array는 main함수 안에 있으므로 stack영역에 들어있다. char array는 실제 메모리의 연속된 덩어리 이므로 여기에 DATA영역에 있던 문자열을 그대로 복사하는 것이다. 그렇기에 실제 "hello? librewiki!\n" 라는 문자열은 지금 stack 과 data 영역 모두에 존재라게 된다. 그렇기에 str[5]= '!'; 이런식으로 접근하여 수정해도 아무런 오류가 없다. |