|
구분 | 키워드 |
데이터형과 관련 | char, int, float, unsigned, struct, typedef |
반복문 | for, while |
분기문 | if, else, switch, case, default, |
기타 | break, continue, return, sizeof, enum |
[표 1-1] C언어 키워드(keyword)
위의 [표 1-1]은 앞으로 제작하게 될 게임 프로그래밍에 사용되는 C언어 키워드이며 실무에서도 이 정도가 사용된다.
중요한 것은 이 키워드를 얼마나 잘 활용하는가에 달려 있다.
이것은 프로그래밍 능력과 연관된다고 해도 과언이 아니다.
만약 [표 1-1]의 내용을 어느 정도 알고 있다면 이 책과 함께 게임 프로그래밍을 시작하는데 별 무리가 없을 것이다.
진행하다가 모르는 문법은 그때마다 찾아가면서 하면 된다.
실무에 있는 프로그래머들도 이렇게 프로그래밍을 시작하고 진행한다.
이것을 기억하자. 우리는 프로그래밍을 하기 위해서 C언어 문법을 배우는 것이지 C언어 문법을 위해서 C언어를 공부하는
것이 아니라는 것을 말이다.
이점을 기억하고 C언어를 바라본다면 아마도 많은 부담감이 줄어들었을 것이라 생각한다.
C언어에서 포인터는 상당히 중요한 부분을 차지한다. 포인터는 메모리 사용을 자유롭게 해줄 뿐만 아니라 변수를 자유로이
다룰 수 있게 해준다.
그러므로 포인터의 개념과 역할에 대해서는 반드시 이해하고 있어야 하지만 이 책을 따라 가다보면 이 부분도 자연스럽게
해결되므로 포인터에 대해 미리 두려워하지 말자.
그러면 복습 차원에서 [표 1-1]의 키워드를 사용하는 방법에 대해 살펴보도록 하자.
■ 데이터형 관련
int, char, float, unsigned
int, char, float는 변수의 데이터형(data type)에 해당하며 저장되는 메모리의 크기와 값의 범위를 결정한다.
예를 들어 int는 4byte의 메모리 크기를 가지는 변수가 생성된다.
unsigned는 int, char과 함께 사용되며 양수를 저장하는 변수로 선언할 때 사용한다.
float에는 unsigned를 사용할 수 없다.
데이터형 | 메모리 크기 | 범위 |
char | 1 byte | ‐128 ~ +127 |
unsigned char | 1 byte | 0 ~ 255 |
int | 4 byte | ‐2147483648 ~ +2147483647 |
unsigned int | 4 byte | 0 ~ 4294967295 |
float | 4 byte | ±1.2e‐38 ~ ±3.4e38 |
[표 1-2] 데이터형에 따른 메모리 크기와 허용 범위
struct, typedef
struct는 여러 가지 변수를 묶어 새로운 데이터형으로 정의할 때 사용되는 키워드이다.
예를 들어 인사 관리를 위해 사용되는 이름, 소속, 주민등록번호, 직급, 학력, 입사년월일 등을 구조체로 정의하면 아래와 같다.
struct _MEMBER_INFO { char name[15]; // 이름 int code; // 소속 코드 char jumin[14]; // 주민등록번호 int class; // 직급 int education; // 학력 int year; // 입사년 int month; // 입사월 int day; // 입사일 }; |
[소스 1-1] struct 사용 예
typedef는 기존의 데이터형을 새로운 이름의 데이터형으로 재정의할 때 사용하는 키워드로긴 문장의 데이터형을 간략히
나타내고자 할 때 사용된다.
typedef unsigned int UINT; typedef struct _GAME_INFO GAME_INFO; |
[소스 1-2] typedef 사용 예
■ 반복문
for, while
for문과 while문은 조건식이 만족될 때만 { 와 } 사이를 반복하여 실행한다.
기본 형식과 실행 순서는 아래 [표 1-3]과 같다.
for 형식 | while 형식 |
for( ①초기화 ; ②조건식 ; ③증감값 ) { ④문장; } 실행 순서 : ① ② ④ ③ ② ④ ③ ② ④ ... | while( ①조건식 ) { ②문장; } 실행 순서 : ① ② ① ② ......... |
[표 1-3] 반복문 형식
for문과 while문의 차이점은 조건식을 거짓으로 만들어 반복문을 종료하게 만드는 데 있다.
for문의 반복은 증감값에 의해 조건식이 거짓으로 될 때까지 반복하지만 while문은 { 와 } 사이에 조건식을 거짓으로 만들어
주는 코드를 넣어 반복을 종료한다.
■ 결정과 선택
if, else
if문과 함께 사용되는 조건식이 만족되면 if 영역을 실행하고 그 외에는 else 영역을 실행한다. 각 영역은 괄호로 나타낸다.
if( 조건식 ) { // 조건식이 참(true)이면 실행 }else{ // 조건식이 거짓(false)이면 실행 } |
[표 1-4] if와 else 사용 형식
switch, case, default
switch문은 값에 따라 실행영역이 결정되며 기본 형식은 아래 [표 1-5]와 같다.
default는 switch문에 해당되는 값이 없는 경우에 실행되는 영역으로 이 부분은 생략할 수 있다. 특히 case의 실행영역은
break가 나오기 이전까지이다.
switch( 변수1 또는 값 ) { case 상수(값)1: 문장 1; break; case 상수(값)2: 문장 2; 문장 3; break; default : 문장4; } |
[표 1-5] switch문 형식
■ static
변수는 크게 지역 변수와 전역 변수 그리고 정적 변수로 나눈다.
지역 변수는 함수 안에 선언된 변수를 말하며 함수 호출과 동시에 생성되고 함수가 종료될 때 소멸되는 변수이다.
전역 변수는 프로그램이 생성될 때 생성되며 프로그램이 종료될 때 소멸된다.
정적 변수는 static과 함께 아래 [표 1-6]과 같이 선언하며 정적 변수가 함수 안에 선언되면 함수 호출될 때 생성이 되고
프로그램이 종료될 때 소멸된다.
static 데이터형 변수명; |
[표 1-6] 정적 변수의 형식
정적 변수가 전역 변수처럼 선언되면 현재의 c 파일 안에서만 전역적으로 사용할 수 있다.
구분 | 사용 범위 |
지역 변수 (local variable) | 함수 안에서만 사용 |
전역 변수 (global variable) | 프로젝트 전체에서 사용 |
정적 변수 (static variable) | 선언된 함수 또는 파일(*.c)안에서만 사용 |
[표 1-7] 사용 범위에 따른 분류
■ 기타
break와 continue
break는 break와 가장 가까운 반복문 또는 switch문을 종료하게 한다.
continue는 반복문 안에 사용되며 continue가 속한 가장 가까운 반복문을 다시 반복하게 한다.
만약 반복문 안에서 continue를 만나면 continue 이하의 코드는 실행하지 않은 채 다시 반복문으로 제어를 옮겨 반복한다.
return
return은 함수를 종료하게 하는 키워드이다.
특히 함수를 통해 반환할 값이 있는 경우에 return과 함께 사용하면 함수를 호출한 쪽으로 값을 되돌려 준다.
그리고 호출한 함수 안에서 되돌려 주는 값 없이 함수를 강제적으로 종료할 때도 return을 사용한다.
sizeof
sizeof는 변수의 메모리 크기를 byte단위로 측정해 준다.
enum
enum은 상수를 대신하는 문자(열)를 변수값으로 사용하게 해준다.
기본 형식은 구조체와 유사하며 열거형 변수로 선언된 변수는 enum에 나열된 문자(열)를 값으로 설정한다.
선언과 사용방법은 아래 [소스 1-3]을 살펴보기 바란다.
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h>
enum COUNT { ZERO, ONE, TWO }; // ZERO: 0, ONE: 1, TWO : 2
int main(void) { enum COUNT nCount; // enum형 선언 nCount = ONE; // 값 대입 printf( "출력 : nCount = %d \n", nCount ); return 0; } |
[소스 1-3] enum 사용
[그림 1-19] enum형 변수의 출력 결과
여기까지 이 책에서 사용되는 키워드에 대해서 간략히 살펴보았다.
이것 외에 여러분이 개념만 찾아봐야 하는 부분은 함수와 배열, 그리고 포인터이다.
따라서 이 부분을 학습할 때는 물론 문법을 개별적으로 봐도 좋겠지만 되도록 이 책의 게임 프로그래밍을 진행해 가면서
필요한 문법이 나올 때마다 찾아보는 방법을 적극 권하는 바이다.
실무자와 일반 학생이 같은 언어를 공부해도 차이가 많이 나는 것은 바로 ‘목표’ 때문이다.
실무자들은 빠른 시간에 공부해서 현재 맡겨진 프로젝트에 적용해야 하므로 기본 원리만 이해하고 나머지는 프로그래밍을
하면서 필요할 때마다 찾아보면서 익히게 된다. 이렇게 진행하다보면 프로젝트가 끝날 때 문법도 같이 완성된다.
이때의 문법은 프로그래밍 속에 살아 있는 문법이 되는 것이다.
학생은 어떠한가? 모두 다 그런 것은 아니지만 문법서를 그냥 보는 것이다.
목표는 처음부터 끝까지 보는 것이다.
문법이 완성되었을 때 실제 프로젝트를 하려면 프로그래밍을 어떻게, 어디에 해야 할지 몰라 헤매게 된다.
이것은 프로그래밍과 문법이 연결되지 않았다는 증거이다.
이 책을 학습하기 위한 기본 문법은 [표 1-1]에 소개한 정도만 이해하고 있으면 된다. 특히 포인터가 어려우면 그냥 두라.
프로그래밍을 하면서 자연스럽게 알게 될 것이다. 그리고 그 부분을 프로그래밍에서 왜? 사용할 수밖에 없는지를 알게 되면
그와 관련된 문법을 스스로 찾아 공부할 수밖에 없을 것이다.
이제 독자의 옆에 C언어 문법서를 두고 이 책과 함께 게임 프로그래밍을 즐겨보자.
|