2016년 2월 28일 일요일

1. A Tutorial Introduction


  • 1. A Tutorial Introduction

읽었던 내용 중, 중요하고 생소한 부분을 정리하였습니다.
한국말로 해석하기에 애매한 부분은 영단어 그대로 사용했습니다.



  • summary 1

#include <stdio.h>  => standard input/output에 관한 정보를 해당 소스 파일에 포함 하는 것을 컴파일러에게 알리는 것이다.


  • summary 2

printf 함수는 C언어의 요소가 아니다. C언어 그 자체로는 I/O이 정의 되어 있지 않다. printf는 ANSI 표준에 정의되어 있기 때문에, C프로그램에서 함수의 표준 라이브러리로 접근할 수 있다. 표준 함수들의 내부 구조는 시스템 마다 다르다. 그러나 표준을 준수하는 라이브러리 함수들의 property는 어떠한 컴파일러를 사용해도 모두 같다.


  • summary 3

celsius = (fahr-32) * 5 / 9      X
C언어는 정수형 나눗셈은 fractional part는 버리기 때문이다.
5/9 ≒ 0.5555556 => 0


  • summary 4

프로그램은 특별한 값으로부터 입력의 끝을 구별한다. getchar같은 함수는 더이상 입력 하지 않을 때, 독특한 값을 사용한다. 하지만 그 값은 실제 character 값과 혼동된다. 따라서 그 값은 EOF를 사용한다.  EOF는 <stdio.h>에 정의되어 있다.
ex) #define EOF     0


  • summary 5

logn interger은 일반적으로 최소 32bits이며 int는 해당 운영체제마다 다르며, 16bits일수도 있고 32bits 등등이 가능하다.


  • summary 6

<Word Counting>
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = 'OUT';
else if (state == OUT)
{
state = IN;
++nw;
}
}
state 변수를 이용해 단어들을 구분하였다.


  • summary 7

definition(정의) vs declaration(선언)
ex)
a.c
int max;   - definition
char longest[MAXLINE];   - definition

b.c
main() {
extern int max;    - declaration
extern char longest[MAXLINE];    - declaration
}


  • summary 8

extern 변수 자체는 위험성을 가졌기 때문에 fraught하다. extern 변수는 변수들을 기대하지 않은 값으로 바뀔 수 있으며, 의도치 않은 값이 되거나 프로그램이 수정하기 어려워 질 수 있다.



  • summary 9
현재 내가 읽고 있는 책은 K&R 2판이다. K&R2라고 부른다. K&R2가 나오기 전에는 1978년 이후로 C언어의 표준은 K&R 1판을 따랐다. K&R 2판이 1988년에 나오고 이 책을 모든 사람들이 다음 표준의 기술서로 사용하였다.

C언어 표준 순서
K&R1 -> K&R2 -> ANSI C89 -> ANSI C90 -> ANSI C95 -> ANSI C99 -> ANSI C11

cf) C89의 완성이 83~89년까지 걸렸기 때문에 K&R2에 ANSI C89 내용이 포함 된 것이다.


older C의 함수 (K&R1)

ex)

int Test();

Test(a, b)
매개 변수형 정의
{
  함수 내용
}

이와 같은 함수 사용은 매개 변수 목록이 permit되지 않았기 때문에, 컴파일러는 쉽게 Test 함수의 매개변수를 check할 수 없었다.

따라서 다음과 같은 코드 작성이 가능하다. ( 현재 컴파일러도 대부분 가능하다. )


Test()
{
  return 10;
}

main()
{
 printf("%d\n", Test(10,20,30));
}

콘솔 화면에는 10이 찍힌다. Test함수 호출시 컴파일러는 전달한 변수의 개수나 타입을 check하지 않기 때문이다.



  • 영어 표현 정리

set aside storage : 따로 저장하다.



댓글 없음:

댓글 쓰기