출처:http://winapi.com
커서의 움직임을 보다 효율적으로 하기 위해 TurboC.h을 제작한 것 같다.
이를 사용하면 cmd창내에서의 커서를 간편하게 제어할수 있다.
웬만한 해더파일을 전부 포함시켜 놓았다.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
커서의 사이즈와 타입을 위해 선언해 놓았다.
typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE;
void setcursortype(CURSOR_TYPE c);
화면을 command명령어인 cls를 이용하여 초기화 해준다.
void clrscr();
커서의 좌표를 매개변수로 입력하여 원하는곳에 goto해준다.
void gotoxy(int x, int y);
커서의 현재좌표를 구하는 함수이다.
int wherex();
int wherey();
#define delay(n) Sleep(n) // n/1000초만큼 시간 지연
rand함수만을 호출 할경우 매번 똑같은 난수가 발생 하므로 time함수와 srand함수를 이용하여 난수의 초기값을 매번 다르게 해준다.
#define randomize() srand((unsigned)time(NULL)) // 난수 발생기 초기화
#define random(n) (rand() % (n)) //0~n까지의 난수 발생
The types __int8, __int16, and __int32 are synonyms for the ANSI types that have the same size, and are useful for writing portable code that behaves identically across multiple platforms. Note that the __int8 data type is synonymous with type char, __int16 is synonymous with type short, and __int32 is synonymous with type int. The __int64 type has no ANSI equivalent.
표준규격은 아니란다. 그럼 왜 만들어놨을까..
int형으로 표현할수 있는 정수는 42억정도까지 있다. 근데 이보다 더 큰 수를 쓰고 싶다면
어쩔수 없이 float형을 사용하여 표현 할 수 있는데 이는 처리속도에 지장을 준다.
CPU는 쓸모 없는 소숫점이하의 수를 연산하게 되는 것이다. 이를 위해 __int64라는 자료형이
생겼다고 하는데 효율성이 얼마나 좋을지는... 이런거 테스트해보는 구문이 있었는데
나중에 생각나면 한번 해봐야 하지 않을까..
예전에 두수를 연산할때 되도록 '/'연산자를 쓰면 몇번의 연산을 더 필요로 하기 때문에
다른 방법으로 하느것이 프로그램의 동작속도를 빠르게 한다고 했었는데 그거와 비슷한 것
같다. Shift연산자를 사용하면 된다. >> , << 곱하기 나눗셈 대신에 요고 이용.
키워드와 식별자에 대한 강의는 대충 끝났다. 기존에 알고 있는 것들 이었지만 기초는
언제나 중요한 법이니깐 그리고 내 기억력이 3일(?)이라 왠지 새롭다.
2^10은 1024 즉 1KB라는건 왠지 중요한 척도 이다. 이 숫자만 알고 있다면 32비트던 16비트던
대충 감이 온다는 것이다. 16비트는 2^16이므로 2^10*2^6으로도 표현 가능하고 즉 64KB라는
답이 바로 나오는 것이다. 이 64KB는 메모리를 참조할때 한번에 처리(?)하는 범위가 된것이
다. 아.. 그리고 16비트는 2바이트이므로 int형이나 포인트형 변수는 2바이트를 가지게 된다.
32비트도 마찬가지로 2^32이므로 2^30*2^2, 즉 한번의 클럭에 4GB라는 어마어마한 처리속도
가지게 되었다. 하지만 이는 이론적 수치이고 RAM과 CPU간의 전송속도를 맞추기위해
1~2MB정도의 처리를 한다고 한다.
32비트에서는 포인터형과 int형이 4바이트를 가지게 되고 64비트에서는 int형은 호환성의
문제때문에 그대로 유지하고 포인트형은 64비트의 모든 주소값을 표현하기 위해
(그럴리는 없지만-_-..1800경??) 8바이트로 바뀔것이라 한다. 이미 바꿧나??
근데 빠른처리속도와 효율적인 메모리공간관리는 비례할 수 없나..
잘 몰라도 지금의 넉넉한 하드웨어적 환경이라면 메모리공간보다도 처리속도를 더 신경쓰느
게 좋은선택일 것 같다.
계단식(처리비율??)으로 설계하여 CPU가 한번에 하나의 일을 처리하도록 설계하는 것이
하나의 방법이라는데 아직은 그 의미만 알 뿐이지 구현까지는 떠오르지는 않는다.
더 배우고 하다보면 "아하" 라는 느낌을 받기를 바라며..
지하철에서도 편히 왔고 거리도 한적한 모습이었다.
scanf 를 쓸때 %d를 입력받고 %c를 쓰게 되면 버퍼에 남아있던 줄바꿈(?)이 남아 있기 때문에 문제가 되곤 하는데 여러 해결방법이 있는데 무엇이 좋은지는 아직 모르겠다.
1. scanf("%d",..); scanf(" %c",..); //서식 문자사이를 한칸띠어서 하는 방법.
2. scanf("%d",..); scanf("\n%c",..); //서식 문자앞에 \n를 써서 해결.
3. scanf("%d%*c",..); scanf("%c", ..); //%*c를 써주는 방법.
4. fflush(stdin); //입력버퍼를 비워주고 다시 입력 받는 방법.
Turboc.h