목록self study (99)
happy coding
TCP school을 보고 정리한 내용입니다. 미리 정의된 매크로 C언어에서는 컴파일러가 참고해야 할 정보를 알려주기 위해 몇가지 매크로를 미리 정의해 제공한다. 이 매크로는 #define 선행처리 지시자로 정의하지 않아도 사용할 수 있지만 사용자가 재정의할 수는 없다. __DATE__ 선행처리가 수행된 날짜를 "Mmm dd yyyy"형식으로 나타낸 문자열 __TIME__ 선행처리가 수행된 시간을 "hh:mm:ss"형식으로 나타낸 문자열 __FILE__ 현재 소스 파일의 이름을 나타내는 문자열 __LINE__ 현재 소스 파일에서 처리중인 라인 번호를 나타내는 문자열 __STDC__ 컴파일러가 C언어 표준을 따르면 1로 설정함. __STDC_HOSTED__ 호스트 환경이 아니면 0, 호스트 환경이면 1로 ..
TCP school 을 보고 정리한 내용입니다. 매크로 함수 C언어에서, #define 선행처리 지시문에 인수로 함수의 정의로 전달함으로서, 함수처럼 동작하는 매크로를 만들 수 잇는데, 이러한 매크로를 함수 같은 매크로(function-like-macro) 또는 매크로 함수라고 한다. 함수와 매크로 함수 매크로 함수는 일반 함수와는 달리 단순 치환만을 해주므로, 일반 함수와 완전히 똑같은 방식으로 동작하지는 않는다. 예를 들어, 일반 함수는 인수를 프로그램이 실행 중일 때 전달받지만, 매크로 함수는 인수를 컴파일 이전에 미리 치환한다. 다른 결과값이 반환되는 오류를 미리 방지하기 위해서 각 인수를 모두 괄호로 묶어줘야 한다. 1. 매크로 함수의 전체를 괄호(())로 감싸야 합니다. 2. 매크로 함수의 인..
선행처리기(preprocess) 선행처리란 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 선행처리 지시문을 처리하는 작업을 의미한다. 이러한 작업은 컴파일하기 전 선행처리기에 의해 먼저 처리된다. 선행처리기는 코드를 생성하는 것이 아니라, 컴파일러가 컴파일하기 좋도록 소스를 재구성하는 역할을 한다. 선행처리문 특징 1. 선행처리문은 선행처리 문자(#)로 시작한다. 2. 선행처리문은 코드 내에서 하나의 라인을 모두 차지하며, 선행처리문 뒤에 C언어 코드를 추가하여 같이 사용할 수 없다. 3. 선행처리문은 다른 C언어의 명령문과는 달리 맨 뒤에 세미콜론(;)을 붙이지 않다. 4. 선행처리문은 소스 파일 어디에나 위치할 수 있지만, 선행처리문이 위치한 곳에서부터 파일의 끝까지만 영향을 미친다. 선행처..
TCPschool 을 보고 정리한 내용입니다. 파일 입출력 함수 C언어에서 인수를 하나만 전달받는 대부분의 입출력 함수는 스트림이 stdin이나 stdout으로 고정되어 있는 함수지만, 입출력 함수 중에서 이름이 f로 시작되는 함수는 입출력 스트림을 사용자가 직접 지정할 수 있는 함수이다. 인수로 FILE 구조체 변수의 포인터를 전달함으로써 ㅎ표준 입출력 장치뿐만 아니라 파일로도 입출력을 진행할 수 있다. fgetc() 함수 fgetc() 함수는 지정된 스트림으로부터 하나의 문자를 읽어 들이는 함수이며, 읽기에 성공하면 읽은 문자를 반환하고, 파일의 끝에 도달하면 EOF를 반환한다. #include int fgetc(FILE *stream); fgetc() 함수의 반환값은 int형 변수로 저장해야 한다...
TCP school 을 보고 정리한 내용입니다. 파일(file) 파일이란 의미있는 정보를 담고 있으며, 이름을 가지고 있는 저장 장치 상의 논리적인 단위를 의미한다. C언어에서는 이러한 파일을 바이트별로 따로 읽을 수 있는 연속적인 바이트의 집합으로 취급한다. 파일의 종류 1. 바이너리 파일(binary file) 2. 텍스트 파일(text file) 1. 바이너리 파일은 데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일을 가리킨다. 프로그램이 이 파일의 데이터를 읽거나 쓸 때는 데이터의 어떠한 변환도 일어나지 않는다. 2. 텍스트 파일은 사람이 알아볼 수 있는 문자열로 이루어진 파일을 가리킨다. 프로그램이 이 파일의 데이터를 읽거나 쓸 때는 포맷 형식에 따라 데이터의 변환이 일어난..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bOMx8a/btrSa77kVDj/Yz1PfFX9nVgeQ9IoegiVO0/img.png)
버퍼(buffer) 표준 입출력 함수를 사용할 때에는 버퍼라는 임시 메모리 공간을 사용하게 된다. 버퍼를 사용하면서 얻을 수 있는 장점은 1. 문자를 하나씩 전달하는 것이 아닌 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상된다. 2. 사용자가 문자를 잘못 입력했을 경우 수정할 수 있다. 이다. 하지만 입력 작업에 버퍼를 사용하는 데에 단점 또한 존재하는데, 빠른 반응이 요구되는 게임과 같은 프로그램에서는 키를 누르는 즉시 바로 전달되어야만 한다. 버퍼링 방식 입출력에 사용되는 버퍼링에는 1. 완전 버퍼링(fully buffered) 2. 라인 버퍼링(line-buffered) 이 존재한다. 완전 버퍼링은 버퍼가 가득 차면 버퍼 안의 내용을 목적지로 보내는 방식이며 보통 파일 입출력에서 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbJ6lv/btrScQjJssV/PY2vpFEpjhg82RIvQbKHA1/img.png)
TCP school을 보고 정리한 내용입니다. 공용체(union) 공용체는 union 키워드를 사용해 선언하며, 한 가지를 제외한 모든 면에서 구조체와 같다. 그 한가지는 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점이다. 모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수밖에 사용할 수 없다. typedef union { unsigned char a; unsigned short b; unsigned int c; } SHAREDATA; int main(void) { SHAREDATA var; var.c = 0x12345678; printf("%x\n", var.a); printf("%x\n", var.b); printf("%x\n", var.c); return 0; }..
TCP school을 보고 정리한 내용입니다. 함수와 구조체 C언어에서 함수를 호출할 때 전달되는 인수나, 함수가 종료될 때 반환되는 반환값으로 구조체를 사용할 수 있다. 그 방식은 기본 타입과 완전히 같으며, 구조체를 가리키는 포인터나 구조체의 한 멤버 변수만을 사용할 수도 있다. 구조체의 멤버 변수를 인수로 전달하는 방식은 함수가 원본 구조체의 복사본을 가지로 작업하므로 안전하다는 장점을 가지고 있다. 구조체 포인터를 인수로 직접 전달하는 방식은 구조체의 복사본이 아닌 주소 하나만을 전달하므로 처리가 빠르지만 호출된 함수에서 원본 구조체에 직접 접근하므로 원본 데이터의 보호 측면에서는 매우 위험하다. 따라서 const 키워드를 사용하여 함수에 전달된 인수를 함수 내에서는 직접 수정할 수 없도록 하는 ..