C/C++(21)
-
POCU C언어 정주행 3회차 - 평가 순서, Sequence Point
1. 평가 순서 첫 문장부터 뜬금없긴 한데 이 문제를 풀 수 있겠는가? 그냥 간단한 코드를 보고 실행이 어떻게 될지 맞추면 되는 아주 간단한 문제이다. #include int g_num = 0; int AddOne() { return ++g_num; } int SubstractOne() { return --g_num; } int main(void) { printf("%d, %d\n", AddOne(), SubstractOne()); return 0; } 그냥 값이 0으로 초기화된 전역 변수에 1씩 더하고 빼는 연산을 할 뿐이다. 대부분의 사람들은 이 코드를 보고 다음과 같은 흐름으로 프로그램이 실행될 것이라고 판단한다. printf("%d, %d\n", AddOne(), SubstractOne()); p..
2022.12.08 -
POCU C언어 정주행 2회차 - 함수 전방 선언, 빌드 과정, 라이브러리
1. 함수의 전방 선언에 대해서 우리는 기본적으로 C언어같은 절차지향적인 언어가 위에서 아래로 읽는다는 사실을 배웠을 것이다. 그럼 여기서 다음과 같은 코드가 있다고 가정할 때, 결과가 어떻게 나오는지 맞춰보자. #include int main(void) { Func(); return 0; } int Func() { return 0; } 대부분의 사람들이 함수의 전방 선언을 배우면 컴파일이 되지 않는다고 이야기한다. 하지만 틀렸다! 놀랍게도 정상적으로 작동을 한다. 이유는 C언어에서 컴파일러는 어떤 함수의 이름을 봤을 때, 이렇게 동작하기 때문이다. "어? 너같은 함수 본 적 없는데? 너가 어떤 애인지 모르겠지만 프로그래머가 짠 함수라고 가정하고 그냥 넘어갈게. 반환형은 int라고 가정한다?" 놀랍게도 ..
2022.12.08 -
POCU C언어 정주행 1회차 - 매개변수 빈칸 vs void, 주석, signed vs unsigned
1. 함수 선언에서 매개변수 리스트를 작성할 때, 빈 칸 vs void 함수 2개를 아래와 같이 선언했다고 가정하자. int FuncA(); int FuncB(void); 필자는 이 2개의 선언이 같은 뜻이라고 생각했다.... 착각이었다. C89를 기준으로 엄밀하게 말하면 아래와 같다. 1)은 정의문에서 매개변수가 어떤 것이 나오게 될 지 모른다는 뜻이다. 즉, 정의문에서 매개변수가 존재해도 문법 위반이 아니다! 2)는 말 그대로 void라고 명시를 했기 때문에 매개변수가 존재하지 않는다는 뜻이다. 여기서 선언과 정의를 명확하게 구분해서 글을 읽고 이해하는데 헷갈리지 않도록 하자! 결론: 매개변수 리스트가 없다면 반드시 void를 넣어주자. 2. 주석을 다는 방법 C89를 기준으로 주석을 다는 방법은 /..
2022.12.02