게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
The C PROGRAMMING LANGUAGE 해설
게시물ID : programmer_2385짧은주소 복사하기
작성자 : 사원대우임원
추천 : 3
조회수 : 634회
댓글수 : 1개
등록시간 : 2014/04/04 18:32:23
프롤로그 http://todayhumor.com/?programmer_2276
1일차 http://todayhumor.com/?programmer_2295
2일차 http://todayhumor.com/?programmer_2322



== CHAPTER 1: A Tutorial Introduction ==

=== 1.2 Variables and Arithmetic Expressions ===
이 장에서는 화씨 온도와 섭씨 온도 비교 표를 출력하는 프로그램을 만들어 보면서,
변수와 printf() 함수를 설명합니다.
전 책에 안 나오는 "덜 중요한" 것만 얘기하겠습니다.

* C99 스펙
C에는 참/거짓을 나타내는 변수형이 없습니다.

많은 언어들이 true, false 같은 boolean타입이 있는데 말이죠.
C에서는 0이면 false, 그 외의 값은 모두 true로 해석됩니다.

C99라고 하는 C언어 최신 스펙이 있습니다. 
컴파일러 만드는 회사들이 지켜야 하는 C언어 스펙이고요, 1999년에 제정된 걸 C99라고 부르고 놀랍게도 이게 최신입니다.
더 놀라운건 15년이나 지났어도 C99를 완전하게 지원하는 C 컴파일러가 별로 없습니다. 일부 스펙만 지원하는 컴파일러가 다수입니다.

C99에서 boolean 타입을 지원하도록 정했는데요, _Bool 이 바로 boolan 타입 입니다.
stdbool.h 헤더파일을 인클루드 하면 boolean 타입이 정의되어 있어서 쓸 수 있어서 좀 더 우아한 모양의 코드를 작성할 수 있습니다.

#include
.... 생략
bool b = false;

아쉽게도 VS2010의 C 컴파일러는 이 코드를 컴파일하지 못 하는군요. 
MS는 표준을 지키려 노력하기 보다는 표준에 없는 기능을 추가하는 안 좋은 습성이 있습니다.
그래서 프로그래머들중에 MS를 싫어하는 사람이 많습니다. 제 글이 반대 먹는 이유도 아마 제가 VS에서 실습하라고 추천해서인거 같습니다.

어쨌든 많은 C개발자들은 C99같은 최신 스펙을 잘 활용하지 않습니다.
되도록이면 많은 컴파일러에서 무리없이 빌드될 수 있는 코드를 작성하는 것이 더 현명한 방법이니까요.

컴파일러 회사들이 C99 지원을 게을리 하는 이유중에 C++ 컴파일러의 개선에 집중하기 때문이라는 나름 설득력 있는 설도 있습니다.
C++ 컴파일러로 C를 컴파일 해도 잘 되니까 C++ 컴파일러 쓰라는 건가?

C++로 개발중인 프로젝트팀에서 C++ 스타일로 코딩하지 않고 C 스타일로 코딩하는 개발자도 있는데요, 주위에서 "컴파일러만 C++를 쓴다"고 놀리기도 합니다.
또는 "주석만 C++ 이다"라고 하는 경우도.

C의 /* */ 주석은 참 불편합니다. C++의 // 주석이 훨씬 편합니다. C99는 // 주석도 포함하고 있습니다. 그러나 앞서 말했듯이 C99는 없는 셈 치세요.
VS2010의 C 컴파일러에서 해보니 이번에는 //를 지원하는군요.

* 정수 나누기 정수는 항상 정수
5/9는 항상 0 입니다.

아래 처럼 둘 중 하나만 실수 표현식으로 바꿔주면 0.555.. 가 됩니다.

5.0/9 
또는 
5/9.0 

* 문서화
주석을 적어 놓는 작업을 "주석을 단다"라고 표현하는데요,

어느 정도 규모가 되는 회사는 아마 다 주석을 어떻게 달라고 하는 표준 규칙이 있을겁니다.
보통 소스코드의 맨 윗부분에 이 파일이 어떤 용도인지 적어주고, 함수의 앞에도 설명을 달아 놓는게 좋습니다. 
남이 보기에도 좋고, 자기가 보기에도 좋습니다.
자기가 짠 코드는 절대 안 까먹을거 같죠? 몇 달 지나서 보면 자기도 이해하기 어렵습니다.

* 정수의 범위
정수형으로 가장 많이 쓰는게 int인데요, 책에서는 2바이트(16비트)로 설명 되어 있습니다만, 지금은 4바이트가 일반적입니다. 
범위를 대충 외워두면 편할 때가 있는데요, 4바이트 정수는 약 -21억 ~ 21억 정도입니다.
이 정도면 꽤 큰 거 같은데요, 용량 표현 방식으로 하면 -2GB ~ 2GB 입니다. 2GB 넘는 큰 파일의 특정 위치를 표현하기에는 부족하단 뜻이죠.

책에 나온 2바이트 정수의 범위가 -32768 ~ 32767 인데요, 절대값이 왜 1 차이나는지 궁금하지 않나요? 전 쓸데 없이 이런게 궁금했었는데요.
2바이트, 즉 16비트로 구분할 수 있는 전체 가짓수가 65536개 입니다. 이걸 반으로 나누면 32768개 인데요, 양수에 0도 포함되니까 최대 범위가 32767이 됩니다.
즉 음수는 -32768 ~ -1 이고 양수는 0 ~ 32767 입니다. 둘 다 32768개 입니다. 다른 크기의 정수도 마찬가지로 1씩 차이납니다.

오늘은 여기까지 입니다.
한 달안에 끝내려고 했는데 생각보다 진도가 느리네요.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호