일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- set
- directx
- Stack
- 운영체제
- 아두이노
- 라인트레이서
- 아두이노 컴파일러
- Deque
- arduino compiler
- map
- html
- WinAPI
- 자료구조
- Arduino
- c++
- 아두이노 소스
- vector
- 컴퓨터 그래픽스
- 시스템프로그래밍
- LineTracer
- 수광 소자
- list
- Visual Micro
- queue
- priority_queue
- C언어
- Algorithm
- 통계학
- Array
- stl
- Today
- Total
목록Programming/C (28)
Kim's Programming
파일 정보의 저장 파일은 디스크에 정보가 저장되는 단위이며 고유의 이름을 가집니다. 파일에는 프로그램이 작성한 정보가 저장이 되는데 워드 프로세서는 문서 파일을 만들고 그래픽 프로그램은 그림을 만드며 컴파일러는 소스파일을 만듭니다. 프로그램이 실행 중에 파일을 엑세스하는 경우가 많은데 이번에는 디스크에 있는 파일을 읽거나 쓰고 관리하는 방법을 알아보겠습니다. 프로그램은 실행에 필요한 코드는 가지지만 모든 데이터를 가지지는 않습니다. 실행 파일의 크기에는 제약이 있기 떄문에 모든 정보를 다 가질 수 없으며 그래서 큰 정보는 외부의 파일에 두고 실행중에 읽어서 사용하는 방법을 씁니다. 또한 프로그램이 작업결과를 영구적으로 저장하기 위해서도 파일을 사용합니다. 편집하던 문서나 작성중인 프로그램 소스 등도 파일..
가변 인수 함수의 활용 가변 인수 함수는 한 번 호출로 여러 개의 정보를 다양한 방법으로 다룰 수 있다는 면에서 편리합니다. 특히 printf 함수는 다양한 타입의 변수들을 한꺼번에 출력할 수 있어 변수값을 확인해 볼때 아주 유용합니다. 이런 함수를 직접 만드려면 독자적으로 서식을 정의하고 서식 문자열과 대응되는 가변 인수를 직접 읽는 복잡한 루틴을 만들어야 하는데 다행히 이런 일을 대신해 주는 함수들을 준비되어 있습니다. 대표적으로 다음 두 함수만 보겠습니다.12int vprintf(const char * _Format, va_list argptr);int vsprintf(char *buffer, const char *format, va_list argptr); cs이 외에 vscanf, vssanf등..
가변 인수 함수의 조건 가변 인수 함수는 인수의 개수와 타입에 대한 제약이 없지만 그렇다고 해서 아무 인수나 마음대로 전달할 수 있는 것은 아닙니다. 가변 인수 함수에도 지켜야 할 규칙들이 있는데 이 규칙에 대해서 알아 보겠습니다. 가변 인수 함수는 반드시 하나 이상의 고정인수를 가져야 합니다. 첫 번째 인수부터 가변 인수일 수도 없는데 왜냐하면 가변 인수를 읽기 위한 포인터 ap를 초기화하기 위해서 마지막 고정 인수의 번지를 알아야 하기 떄문입니다. _crt_va_start 매크로는 마지막 고정 인수의 번지에 길이를 더해 가변 인수가 시작되는 번지를 계산하는데 고정인수가 없으면 이 매크로가 동작하지 않습니다. GetSum 함수는 인수의 개수를 전달하는 num 고정인수를 가지며 printf 함수도 서식 ..
함수 포인터 함수 포인터의 정의 함수포인터(Pointer To Function)란 함수를 가리키는 포인터를 말합니다. 포인터란 본래 메모리상의 번지를 저장하는 변수인데 함수도 메모리에 존재하며 시작 번지가 있으므로 포인터 변수로 가리킬 수 있습니다. 일반적인 포인터는 변수가 저장되어 있는 번지를 가리키지만 함수 포인터는 함수의 시작 번지를 가리킨다는 점에서 다릅니다. 함수 포인터와 구분하기 위해서는 변수를 가리키는 일반적인 포인터를 특별히 데이터 포인트라고 부르기도 합니다. 정수형을 가리키는 int *pi는 정수형 변수의 번지를 가지며 실수형을 가지는 double *pd는 실수형 변수의 번지를 가집니다. 데이터 포인터는 단순히 가리키는 대상체의 타입만 밝히면 되므로 선언 형식이 간단합니다. 반면 함수 포..
Const 상수의 정의 키워드 const는 값을 변경할 수 없는 상수를 정의합니다. 기본형태는 다음과 같습니다. const 타입 변수명 = 초기값; 변수를 선언하는 일반적인 문장과 비슷하되 앞에 const를 붙이고 뒤에 반드시 초기갑슬 적어야 한다는 점만 다릅니다. 다음 소스에서 보겠습니다.12345678910#include const int HourPerDay = 24;const int MinPerHour = 60;const int SecPerMin = 60; void main(){ printf("하루는 %d초 입니다. \n", HourPerDay*MinPerDay*SecPerDay);}Colored by Color Scriptercs하루는 24시간이고 한시간은 60분 1분은 60초 라고 정의 했습니다..
구조체 대입 구조체가 배열과의 차이점을 꼽자는 것은 대입이 가능하다는 것입니다. 다음 코드는 초기화된 구조체 Person1의 멤버들을 Person2에 그대로 대입합니다.123tag_Person Person1={"홍길동",29,176.43};tag_Person Person2;Person2=Person1;csi=j 같이 정수형 변수 끼리 대입하면 i와 j가 똑같은 값을 가지게 되듯이 Person2=Person1와 같이 구조체를 대입하면 두 구조체는 내용이 같아집니다. 물론 대입 연산자의 좌, 우변은 동일한 타입의 구조체여야 합니다. 구조체끼리의 대입 연산 동작은 구조체의 길이만큼 메모리 복사로 정의 되어 있는데 Friend2=Friend1대입문은 다음 코드와 기능상 동일합니다.1memcpy(&Person2,..
구조체 구조체는 C의 데이터 타입 중에서 크기가 게일 큽니다. 정수나 실수 또는 문장열 등의 단순한 형태로 나타낼 수 없는 복잡한 데이터를 표현할 때 구조체를 사용합니다. 표준 함수 중 구조체를 사용하는 함수가 있으며 윈도우에서도 구조체가 흔히 사용됩니다. 구조체(Structure)를 문장화하여 정의를 내리면 "타입이 다른 변수들의 집합" 이라고 할 수 있으며 더 간단하게 표현하게되면 이종 변수 집합이라고 할 수 있습니다. 배열이 타입이 같은 변수들의 집합인 것에 비해 구조체는 다른 타입을 가지는 변수들을 하나의 이름으로 묶어둔 것입니다. 한 사람의 신상정보를 표현하고자 한다면 다음과 같은 변수들이 필요할 것입니다. 123char Name[10];int Age;double Height;csName은 사람..
::env 운영체제의 환경 변수를 알려 줍니다. 환경 변수는 운영체제마다 다르게 정의하는데 DOS의 경우 Path, Prompt등이 있고 윈도우즈의 경우는 컴퓨터 이름, 시스템 디렉토리 등의 정보들이 있습니다. 응용 프로그램에게 자신이 실행되는 환경을 알 수 있도록 해 준다는 의도로 전달되는 인수이지만 이 인수가 아니더라도 환경 변수를 조사할 다른 방법이 있기 때문에 실질적으로 사용되지는 않습니다. 다음 소스는 main함수로 전달되는 인수를 화면으로 출력하기만 합니다. 명령행에서 입력한 인수가 어떻게 프로그램으로 전달되는지를 볼 수 있습니다.123456789101112#include void main(int argc, char *argv[],char *env[]){ int i = 0; printf("전달..