C언어 복습(21)
-
POCU C언어 정주행 15회차 - 어서트 재정의, 전처리 명령어와 장단점
1. 어서트 재정의 assert라는 함수는 디버깅을 하는 데 있어서 자주 활용되는 함수이다. 그런데 매크로 함수를 적절하게 활용하면 이런 assert함수를 좀 더 보기좋게 바꿀 수 있다. 아래의 코드를 보자. #define ASSERT(condition, msg) if (!(condition)) { fprintf(stderr, "%s(%s: %d)\n", msg, __FILE__, __LINE__); __asm { int 3 } } void Func(void) { int month = 20; ASSERT(month < 12, "invalid month number"); } 우리가 기존에 활용했던 assert함수는 assert(month < 12); 정도였을 것이다. 그런데 이번에 보게 된 ASSERT매크..
2023.01.05 -
POCU C언어 정주행 14회차 - malloc과 free, 메모리 함수, 메모리 관리 기법
1. malloc과 free 이번 글은 강의에서 동적 할당에 대해 다룬 것들 중에서 내가 몰랐던 것들을 위주로 적어보려고 한다. 따라서 malloc, calloc, free함수의 사용법이나 어떤 역할을 하는지에 대한 내용은 기존에 알고 있던 내용이기 때문에 적지 않을 것이다. 대부분이 메모리 관리를 하는 것에 있어서 실수를 예방하는 방법에 대한 내용이고 소수의 어떤 방식으로 메모리가 할당되는지에 대한 내용을 다룰 것이다. 동적 할당을 하는 데 있어서 가장 중요하게 봐야할 것은 동적으로 할당한 메모리를 어떻게 관리를 해야 실수를 최대한 막으면서 관리를 할 수 있을까에 대한 것이다. 아래에 그 원칙들을 나열해보겠다. malloc, calloc과 일단 메모리를 할당하는 코드를 짰으면 바로 free함수를 호출해..
2022.12.31 -
POCU C언어 정주행 13회차 - 예외 처리, 나쁜 오류 처리, 오류 처리 전략
1. 예외 처리 C를 배운 사람은 아마 다음과 같은 사실을 알고 있을 것이다. "C는 예외 처리를 위한 기능이 없다." 다른 언어는 예외 처리가 있지만 C는 이런 것들을 지원하는 기능이 없기 때문에 C로 짜여진 프로그램은 안정적이지 못할 것이라고 생각할 수 있다. 하지만 이 강의는 운영체제를 예시로 들면서 "예외가 없다고 해서 프로그램이 안정적이지 못한 것은 아니다. 운영체제는 C로 짜여져 있지만 운영체제만큼 안정적인 프로그램을 찾기는 힘들지 않는가?" 라고 이야기 한다. 그러면서 다음과 같은 이야기도 했다. "예외 처리를 자동으로 해주는 기능은 오히려 프로그래머를 게으르게 만들 수 있다." 사실 이런 부분을 포함해서 오류를 처리하는 부분의 전반적인 내용에서 인문학적인 내용을 포함하고 있다. 그래서 훌륭..
2022.12.30 -
POCU C언어 정주행 12회차 - 가변 인자 함수
솔직히 이것도 이전 글에서 다뤘던 비트 패턴과 공용체만큼이나 거의 쓰지 않는 것이다. 실제로 내가 대학교 입학하고 약 5~6년 정도 C/C++을 다루고 있는데 솔직히 비트 패턴, 공용체, 가변 인자 함수는 사용해본 기억이 거의 없다. 물론 이전 글에서도 그랬지만 이번에도 정리는 할 것이다. 가변 인자 함수가 뭘까? 말 그대로 인자가 변하는 것이 가능한 함수 즉, 함수로 들어오는 인자의 유형과 갯수가 변하는 것이 가능한 함수라는 뜻이다. 그럼 이제 가변 인자 함수가 어떻게 생겼고 어떻게 사용하는지 알아보자. 근데 사실 가변 인자 함수는 이미 본 적이 있다. C언어를 배운 적이 있다면 다음 아래의 두 함수를 분명 사용해봤을 것이다. printf scanf 이 두 함수가 사실은 가변 인자 함수다. 잘 생각해보..
2022.12.29 -
POCU C언어 정주행 11회차 - 비트 패턴, 공용체
1. 비트 패턴 C언어를 배운 사람들 중에서 비트 패턴을 기억하는 사람은 거의 없을 것이라고 생각한다. 왜냐? 공용체와 마찬가지인데 거의 안쓰기 때문이다... 하지만 기왕 모르는 것들 정리하기로 한 김에 이것도 같이 정리하려고 한다. 근데 솔직히 말하면 거의 안쓰는 거여서 그런지 강의에서도 그렇게 깊게 다룬 것 같지는 않았다. 그래서 그냥 나도 강의에서 다룬 것까지만 정리하고 넘어가려고 한다. 비트 패턴이 뭘까? 구조체를 배울 때 여러 종류의 데이터들을 하나의 자료형으로 묶어서 관리했던 것을 기억할 것이다. 근데 그런 자료형들은 기본 자료형들로 구성되어 있을 것이며 8비트, 16비트, 32비트 등으로 정해져있다. 즉, 어떤 데이터를 저장하거나 표현하는 데 있어서 8비트, 16비트, 32비트와 같이 정해진..
2022.12.26 -
POCU C언어 정주행 10회차 - 구조체 패딩
1. 구조체 패딩 보통 무언가를 배울 때 그것의 사용법에만 치중한 나머지 그것이 작동하는 기본 원리를 등한시하는 경우가 존재한다. 나도 그랬고 그래서 지금 복습을 통해 알게 된 내용을 이제와서라도 글로 정리하고 있는 것이다. 다들 C언어를 처음 배울 때, 구조체라는 것을 배운 기억이 분명 있을 것이라고 생각한다. 오늘 다룰 내용이 구조체에서 메모리를 할당하는 것에 대한 내용이다. 다음과 같이 구조체를 선언하고 메모리에 할당했을 때 다음과 같은 생각을 할 수 있다. typedef struct { int a; short b; char c; /* int - 4, short - 2, chaar - 1 모두 합해서 7바이트! */ } Sample; Sample로 변수를 하나 만들었을 때, 7바이트가 나온다고 생각..
2022.12.22