Chapter 1 : 언어 소개
1.1 시작
프로그램 실행 과정
프로그램이 들어 있는 텍스트 파일 작성
파일 컴파일
링크
실행
UNIX 에서는
cc filename명령어로 컴파일함수의 이름은 원하는 대로 붙일 수 있지만 주프로그램(서브루틴이 아닌)의 이름은 꼭 main이라고 해줘야 함
함수들 사이에 데이터가 오고 갈 때는 매개변수를 사용
매개변수는 함수 이름 바로 뒤에 오는 괄호 속에 써야함
매개변수가 없을 때도 괄호는 꼭 써야함
중괄호
{ }는 문장들을 묶어서 하나의 덩어리(복합물 또는 블록)로 만들어 주는 역할함수를 호출할 때 그 함수의 이름과 매개변수만 써 주면 됨
인용부호
“ “속에 있는 문자들은 “문자열" 또는 “스트링 상수"라고 불림인용부호 사이에서는 줄을 바꿔 쓰면 안됨
\n에서 사용되는 \ 는 escape 문자로 출력의 양식을 정해주는 역할
1.2 변수와 수식 표현
/* */는 설명문으로 사이에 있는 모든 문자는 프로그램의 실행에 아무 영향을 미치지 못함프로그램 중간중간에 이런 설명문을 넣어서 프로그램을 알기 쉽게 하면 좋음
한 행 또는 여러 행을 차지할 수도 있고, 명령어의 뒤에 쓸 수도 있음
C에서는 모든 변수는 사용되기 전에 선언해 주어야 함
변수를 선언해 주지 않으면 에러가 생김
변수를 선언해주면 프로그램 중간에 변수 이름 오타로 인한 에러를 막을 수 있음
변수형
int : 정수형
float : 실수형, 부동소수점형
char : 문자형, 1바이트
short : 단정도 정수형
long : 배정도 정수형
double : 배정도 부동소수점형
변수형들의 정밀도는 기종에 따라 다름
ex) PDP-11에서 int는 16비트 부호 숫자(-32786 ~ 32767)
배열(array), 구조체(structure), 유니온(union), 포인터(pointer), 함수(function)
프로그램의 구조를 알기 쉽게 하기위해 들여쓰기(indentation)을 함
몇 칸을 넣느냐는 전혀 상관이 없음
C언어 자체에는 입출력 기능이 없음
printf는 표준 입출력 라이브러리에 들어 있는 함수. C언어 자체에 포함되어 있는 명령어가 아님
1.3 for 문
for 문 구조
첫 번째 부분은 루프의 내용이 실행되기 전에 한 번만 실행됨
두 번째 부분은 조건을 나타내고 이 조건이 만족되면 몸체 부분이 실행됨
두 번째 부분이 실행되고 세 번째 부분이 실행되고 두 번째 부분의 조건이 맞는지 검사함
1.4 상수 정의
#define으로 상수를 정의함상수는 변수와 달리 프로그램 내에서 항상 같은 값을 가짐
상수는 숫자뿐만 아니라 문자나 문자열(string)도 될 수 있음
보통 변수 이름은 소문자, 상수 이름은 대문자로 씀
#define뒤에는 세미콜론을 붙이지 않음
1.5 문자 입출력
문자들로 이루어진 파일이 있을 때 표준 입출력 라이브러리 함수를 사용하여 처리를 할 수 있음
파일은 여러 개의 행으로 이루어져 있고 한 행에는 여러 개의 문자가 있음
행과 행 사이에는 새로운 행의 시작임을 알려주는 기호가 있음 (개행 문자)
파일의 맨 끝에는 파일의 끝임을 알려주는 기호가 있음 (EOF)
C로 파일을 처리하는 프로그램을 작성할 때 행의 길이나 파일의 길이는 신경쓰지 않아도 됨
getchar와 putchar
getchar : 문자 하나를 받아들이는 함수
putchar : 문자 하나를 출력하는 함수
putchar에 정수형 변수를 넣으면 해당 ASCII 값에 해당하는 문자가 출력됨
1.5.1 파일의 복사
getchar와 putchar를 사용하면 입출력 구조를 몰라도 입출력 프로그램을 작성할 수 있음
입력을 그대로 출력으로 내보내는 프로그램
문자를 읽어 들임
while (문자가 파일의 끝을 나타내는 기호가 아닌 동안)
문자를 출력
다음 문자를 읽음
EOF
프로그램에서 파일의 끝을 나타내는 기호
파일의 끝을 나타내는 기호는 -1 또는 0
#define EOF -1또는#define EOF 0을 써주어야 함EOF의 값은
에서 정의하고 있음EOF는 문자가 아니므로 ASCII에 지정되어 있지 않음
EOF를 인식하기 위해 getchar의 변수를 정수형으로 선언
≠는 =보다 우선순위가 높음
1.5.2 문자의 개수 세기
++n :
n = n + 1과 같음n는 n을 사용하기 전에 1을 증가시키고 n는 사용 후에 1을 증가시킴
1.5.3 행의 개수 세기
파일의 각 행 사이에는 행을 바꾸는 기호(\n)가 들어 있음
행의 개수를 세기 위해 \n의 개수를 세면 됨
while문의 몸체에는 if문이 들어 있음
if 뒤의 괄호 속 조건이 만족되면 그다음 문장(중괄호)이 실행됨
만족되지 않으면 그냥 그다음으로 넘어감
문자에 작은따옴표를 붙이면 그 문자에 해당하는 값을 얻을 수 있음
ASCII 문자를 사용하는 컴퓨터의 경우 ‘A’는 65와 같음
ASCII 이외의 문자에서는 A의 값이 65가 아니므로 A를 나타내기 위해 65를 사용하는 것은 추천하지 않음
C에서 문자를 표현할 때는 작은따옴표를 사용
문자열을 사용할 때는 큰따옴표를 사용
1.5.4 단어 개수 세기
&&나 ||로 연결된 조건들은 왼쪽에서부터 검사됨
1.6 배열
C에서 배열의 첨자는 0부터 시작됨
첨자는 정수형 변수, 정수형 상수, 정수 수식도 가능
1.7 함수
프로그램 내에서 여러 번 해야 할 동작을 하나의 함수로 만들어두면 그 함수의 내부가 어떻게 되었는지 몰라도 그 동작을 시킬 수 있음
C에는 제곱계산을 위한 연산자가 없으므로 함수로 처리해야함
함수들은 어떤 순서로 기록되어 있어도 상관 없음
main과 같은 파일 내에 있어도 되고 다른 파일에 들어 있어도 됨
C에서 변수는 그 함수 내에서만 의미를 가짐
한 함수에서 i의 값을 아무리 바꾸더라도 다른 함수의 i는 바뀌지 않음
함수를 호출할 때 쓰는 매개변수 : augument 혹은 actual argument
함수 내에서는 매개변수 : parameter 또는 farmal augument
함수의 연산 결과를 나타내는 문장 return문
return의 뒤에는 변수가 올수도, 수식이 올 수도 있음
main에서의 return문은 프로그램이 정상적으로 끝나도록 확인해 주는 것
1.8 매개변수 값 전달
C가 다른 언어와 크게 다른 점 중 하나는 함수를 호출할 때 매개변수의 값을 전달해 주는 방법임
main 함수의 i와 다른 함수의 i가 별개의 것인 이유
함수를 호출할 때 변수명을 넘겨주는 것이 아니라 값만 넘겨주기 때문
변수명을 넘겨주는 것을 “call by reference”
값을 넘겨주는 것을 “call by value”
C에서는 호출된 함수가 변수의 값을 변화시킬 수 없음
call by value를 사용하면 변수를 적게 사용할 수 있어 더 간결한 프로그램을 짤 수 있음
지역(local) 변수 : 함수 내에서만 변화시킬 수 있는 변수
함수에서 그 함수 바깥에 있는 변수 값을 변화시키는 방법
포인터 사용
배열
1.9 문자 배열
C에서 가장 많이 사용되는 배열은 문자 배열
getchar() : 한 문자만 가져옴
문자열의 끝에는 ‘\0’이 붙어있음
1.10 외부변수
지역변수는 또 다른 말로 자동(automatic)변수라고도 부름
여러 함수에서 공통으로 사용하는 변수를 공통(global)변수라고 함
extern이라는 명령어를 사용하여 공통변수를 정의ex)
extern int max;
공통변수는 함수의 바깥에서도 정의해야하고 그 변수를 사용하는 각 함수에서도 정의되어야 함
공통변수를 사용하는 함수가 공통변수 선언과 같은 파일에 들어 있는 경우에는 함수내에
extern선언을 해주지 않아도 됨라이브러리의 함수의 공통변수를 선언하는 방법
#include를 선언하면 라이브러리에 있는 함수에서 사용되는 공통변수는 다 선언됨
공통변수를 사용하면 함수의 매개변수 부분이 없어 편리함
하지만 변수를 혼동하기 쉽고 일반성이 줄어들음
