본문 바로가기

TIL/따배씨17

전처리기와 라이브러리(2021-01-31~2021-02-01) 16.1 전처리기가 해주는 일들 컴파일러 이전에 처리를 해주는게 전처리기다. 16.3 #define 매크로 -전처리 지시자는 해쉬(#)기호로 시작된다. -매크로는 여러개의 명령어를 하나로 합친것이다. -매크로가 실제 바디로 교체되는 것을 macro expansion 이라한다. #define은 기호적 상수뿐만아니라 함수처럼 사용할 수 도있다. 16.4 함수 같은 매크로 매크로는 전처리기 단계에서 말그대로 값을 복붙만 해주기 때문에 프로그래머가 의도한것과 다르게 계산이 될수 있다는 점을 주의 해야한다. 16.5 가변 인수 매크로 여러개의 인자를 받을때는 ...과 __VA_ARGS__을 쓸수 있다. 16.7 조건에 따라 다르게 컴파일하기 #undef는 define된것을 undefine 해주며 미리 정의 되지 .. 2021. 1. 31.
비트 다루기(2021-01-30) 15.1 비트단위 논리 연산자 지금까지 사용한 논리 연산자(&&, ||, !)는 어떤 자료형의 상수나 변수에 적용 되는 것이었다. 비트단위로 이루어지는 논리 연산자는 이하와같다. 비트단위 연산자가 필요한 이유는 이하와 같다. 만약 게임내에서 1 캐릭터의 8가지 장비상태를 표시하기위해서 가장 작은 자료 단위인 char를 쓸경우 총 8바이트(=64비트)가 필요하다. 그런데 있다와 없다. 2가지만 표현하는 것은 1비트로도 가능한데 가장 작은 자료형인 char를 써도 결국 최소 1바이트(=8비트)를 사용하게 된다. -> 따라서 char 하나에 있는 1바이트(=8비트)를 활용해서 효율적으로 사용하는것 . 15.5 2의 보수 표현법 확인해보기 부호가 있는 정수를 2진수로 표현하기 위해서는 2의 보수(2's Comp.. 2021. 1. 30.
구조체(2021-01-25~2021-01-29) (2021-01-27 생각보다 수강에 시간이 정말 많이 걸리고 있다.... 예상했던것보다 어려운 느낌이다. 아무래도 이번주 내내 구조체 챕터만 들을거 같은 느낌이다.) 4.1 구조체가 필요한 이유 자료형이 서로 다른것들을 모아놓는데 사용가능한 c의 문법이 구조체다. 서로 자료형이 다르더라도 하나로 묶어서 새로운 자료형처럼 사용할수 있게 도와주는게 구조체임. 위의 그림에서 p1, p2, p3가 Struct Patient p1, p2, p3;로 선언되면 구조체의 형에 맞추어 메모리에 자리가 생기는것 14.2 구조체의 기본적인 사용법 기본적인 구조체 선언방법은 이하와 같다. 구조체 변수를 선언하는 방법은 이하와 같다. 그리고 구조체의 특정 자료에 접근할때는 dot(.) membership opeator 를 사.. 2021. 1. 25.
파일입출력의 작동원리 (2021-01-22~2021-01-23) 13.1 파일 입출력의 작동 원리 C언어로 프로그램을 작성하고 실행하면 운영체제와의 사이에 스트림이 3개(stdout, stderr, stdin)가 열린다. printf같이 화면에 출력하는 함수는 내부적으로 stdout스트림을 사용 scanf같이 입력을 받는 함수는 stdin사용 stderr은 프로그래머가 에러를 보내야 할때 사용 어떨때는 파일에 데이터를 저장하거나 불러오고 싶을때가 있음. C에서는 파일입출력을 일종의 스트림으로 다룸. C언어로 작성된 프로그램이 파일과 상호작용할때는 2가지 모드를 사용가능(텍스트 파일 io, 바이너리 파일io) 2가지를 혼합해서 사용하기도 한다. 13.2 텍스트 파일 입출력 예제 C에서 텍스트 파일을 입출력하는 것은 이하와 같다. 13.3 텍스트 인코딩과 코드 페이지 텍.. 2021. 1. 22.
Storage Classes, Linkage, and Memory Management (2021-01-21~2021-01-22) 12.1 메모리 레이아웃 훑어보기 C 언어로 작성한 프로그램이 메모리에서 어떻게 사용되는지에 대한 내용이다. 주의 할점은 초기화 되지않은 전역/정적변수는 BSS에 저장되고 그공간에 있는것들은 프로그램이 시작 될때 0으로 초기화됨. 오히려 한꺼번에 모아서 0으로 초기화 해주기위해 BSS에저장된다고 생각할것 12.2 객체와 식별자, lvalue와 rvalue 12.3 변수의 영역과 연결 상태, 객체의 지속 기간 file 스코프를 지닌 전역 변수 의 사용은 이하와 같다. file 스코프에 있는변수는 프로그램 전체에서 사용할수 있는것처럼 사용이 가능해서 전역변수라고 부른다. file 스코프에 있는변수를 static과 함께 선언하면 해당 파일 내부에서만 쓸수있게 범위가 아래사진처럼 제한된다. Duration이란 .. 2021. 1. 21.
문자열 함수들 (2021-01-19~2021-01-21) 11.1 문자열을 정의하는 방법들 지난강의에서 문자열의 경우 컴파일러가 자동으로 마지막에 널캐릭터를 추가된다는 내용이 나왔었음. puts() 함수는 문자열을 출력을 해준다. 그리고 자동으로 \n을 붙여준다. 문자열도 배열처럼 메모리에 저장이 되어있어서 함수에게 전달할때는 문자열의 첫번째 글자 주소를 포인터로 넘겨줌. puts 함수를 사용하여 문자열을 출력하는 과정은 다음과 같다. 문자열의 포인터는 배열처럼 첫번째 글자의 주소만 전달 해줌. 위의 예시에서 포인터로 선언한 문자열을 20번째줄에서 배열에서 하듯이 원소를 바꾸려하면 에러가 발생한다. 예시사진에는 ptr이 const char*로 선언 됬으니까 비주얼 스튜디오가 바로 잡아주지만 const가 없이 선언될경우 컴파일이 되고 런타임에러 발생한다. 이유는.. 2021. 1. 19.