C (프로그래밍 언어) 편집하기


편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
97번째 줄: 97번째 줄:
  stdbool.h : 표준 bool 타입을 제공한다.
  stdbool.h : 표준 bool 타입을 제공한다.


사실 C99 에 새로 탑재된것은 _Bool 타입이다. 하지만, stdbool.h 를 include 할 경우, 그냥 bool 로도 사용이 가능해진다. 왜 이런식으로 했냐면, 기존 표준에 bool 이 없었기때문에 이 이름을 사용한 코드가 있을 경우를 고려하여, 기존 표준에서 사용하지 말라고 했던 밑줄+대문자로 시작하는 이름인 _Bool 로 만들어놓았고, 여기에 해당되지 않는 경우는 보다 평범한 이름인 bool 로 사용하라고 stdbool.h 를 추가한 것. stdbool.h 을 사용할 경우 추가적으로 true 와 false 도 사용이 가능하다.
사실 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 변수들이 저장된다. 완전히 정확한 것은 아니지만 ROM영역이라 실행 이후에는 접근 권한이 없다고 생각 하면 된다.)
일단 이것을 두개로 쪼개면 컴파일시 결정되는 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]= '!'; 이런식으로 접근하여 수정해도 아무런 오류가 없다.
리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다.
취소 편집 도움말 (새 창에서 열림)

| () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |}