일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 백준
- 지식나눔강좌
- Kotlin
- 알고리즘
- Visual Studio
- 이지스퍼블리싱
- Tips강좌
- VS ERROR
- 티스토리
- Desktop
- 프로그래밍
- CS
- c
- 연산자
- Programming
- Javascript
- doit코틀린프로그래밍
- 배열
- 리뷰
- 문법
- c++
- c#
- 포인터
- tipssoft
- Tips프로그래밍강좌
- Windows
- 김성엽
- 함수
- Win32
- Direct2D
- Yesterday
- Today
- Total
목록함수 (12)
F.R.I.D.A.Y.
일반 함수와 클래스 메서드 함수 명령 단위라고 보면 될 것 같다. 선언 C++과 전혀 다를 것이 없다. 반환형, 함수명, 매개변수 리스트 순으로 작성한다. static void Test(){ } static을 붙인 이유라 함은, static을 붙이지 않으면 객체를 만들기 전까지 제대로 된 사용을 할 수 없다. 클래스 기반인 C#에선 C++과 달리 일반 함수로 사용하기 위해선 static 키워드를 붙여 이 함수가 메서드로 작성되지 않았음을 알려야 한다.[# 그렇다고 저렇게 작성한다고 해서 무조건 메서드가 아니란 소리가 아니다. 일반 함수처럼 사용하겠다는 뜻이지 메서드 중에서도 static 키워드를 붙인 메서드가 분명히 존재하고 또 만들 수 있다. 실질적으로 위에 보인 예시도 클래스 안에 들어가면 메서드의 ..
이전 시간에 우리는 고차 함수에 대해 배웠습니다. 함수를 인자로 넘기는 방법도 배웠죠. 그런데 이전 시간의 범위에는 포함되지만, 조금 더 많은 이야기를 위해 따로 빼놓은 것이 있습니다. 바로 람다식(Lambda Expression)입니다. 이번 시간에는 이 람다식에 대해 배워보겠습니다. 함수를 인자로 넘기기 이전 시간에 함수를 인자로 넘기는 방법에 대해 배웠습니다. 그때 어떻게 사용하던가요? fun sum(a:Int, b:Int){ println("입력 두 값의 합은 ${a + b}") } fun TestFunc(vSum:(Int, Int)->Unit){ vSum(5, 4) } fun main(args:Array){ TestFunc(::sum) } 인자로 들어가는 함수 앞에 함수 참조 기호(::)를 입력..
함수 파트에서 떨어트리고 지금 나온 인라인&익명 함수입니다. 두 문법은 사실 함수 파트를 다룰 때 이어서 함께 작성해도 되지 않았을까 싶은 생각이 듭니다. 이미 지나가버린 걸 어떻게 하겠어요? 시작합니다. 함수의 준비 우리가 특정 작업을 한다고 했을 때, 사전 작업으로 무엇을 할까요? 먼저 작업에 필요한 물건을 가져오거나, 환경을 조성하겠죠. 제가 블로그에 글을 쓰기 위해 컴퓨터를 켜고 로그인을 하는 것처럼 말이죠. 우리 프로그램도 각 작업을 하기 위해서는 사전 작업이 필요합니다. 프로그램은 거대한 하나의 구조물이라 볼 수 있습니다. 이 거대한 구조물을 하나하나 쪼갠 것이 함수죠. 스택 작업 함수 파트에서 봤지만 함수에는 인자를 넘겨줄 수 있습니다. 이렇게 인자로 전달된 값들은 매개 변수의 값이 되는데요..
이번 시간에는 함수에 대해 알아봅니다. 함수를 사용하는 순간부터 프로그램 작성 방식에 대한 패러다임이 바뀔 겁니다. 꼭 알고 넘어가길 바랍니다. 함수 우리는 살면서 많은 일을 합니다. 밥을 먹을 수도 있고, 일을 할 수도 있으며, 지금처럼 공부를 할 수도 있죠. 함수란 이처럼 특정 작업을 하는 일련의 동작을 한데 모아놓은 집합으로 생각할 수 있습니다. "밥을 먹다"로 예를 들어보겠습니다. 우리는 다른 사람들에게 "밥을 먹는다"라고 하지, 밥을 먹을 때 어떤 행위를 하는지 풀어서 설명하지는 않습니다. 밥을 먹는다 수저를 든다 수저로 밥을 푼다 입에 수저로 푼 밥을 넣는다 수저를 놓는다 젓가락을 집는다 반찬을 정한다 정한 반찬을 젓가락으로 집는다 젓가락으로 집은 반찬을 입에 넣는다 위 행동을 밥을 다 먹거나..
함수 포인터 또한 자료형입니다. 모든 자료형은 배열로 만들 수 있다고 했는데요, 이번에는 함수 포인터 배열을 만들어봅니다. # 배열, 함수 포인터를 먼저 알고 있어야 합니다. 선언 방법 먼저 배열의 선언 방법을 되돌아봅니다. type arrayName[length]; // ex) int arr[10]; 함수 포인터의 선언 방법은 다음과 같습니다. returnType (*var)(parameters); // ex) int (*user_abs)(int); returnType: 함수 포인터로 가리킬 함수의 반환형 parameters: 함수 포인터로 가리킬 함수의 인자 만일 printf를 가리킬 수 있는 함수 포인터 배열을 선언하고자 한다면 아래와 같이 작성하면 됩니다. int (*fp)(const char *..
포인터는 신기하게도 함수까지 가리킬 수 있습니다. 어차피 이름이 있으니 이름으로 사용하면 될 텐데 뭐가 좋으냐는 생각을 할 수 있겠지만 이번에 그 생각이 바뀌실 겁니다. # 포인터에 대한 내용을 알고 있어야 합니다. 정적인 것은 싫어요 무엇이든 코드에 명시되어 있다면 이를 수정하기 위해서는 전부 다시 컴파일을 진행해야 합니다. 그러나 포인터를 이용한다면 포인터만 명시되어있지 포인터가 가리키는 내용은 코드에 명시하지 않도록 할 수 있습니다. 따라서 포인터를 사용하면 컴파일을 하지 않고도 실제 작업 내용의 변경이 가능[# 게임을 예로 들면 사소한 버그는 패치로 바로잡곤 합니다. 그런 것이라고 보면 됩니다.]합니다. 함수도 마찬가지입니다. 함수 포인터 함수 포인터는 말 그대로 함수를 가리킬 수 있는 포인터입니..
이번 시간에는 함수에 인자를 넘길 때 넘기는 방식에 대해 이야기해봅니다. 시작에 앞서 이번 포스트에서는 아래 코드를 이용해 예시를 들도록 하겠습니다. #include void printA(int a){ printf("%d\n", a); } void printAbsA(int a){ printf("%d\n", a > 0 ? a : -a); } int main(void){ int a; scanf("%d", &a); printA(a); printAbsA(a); return 0; } 값을 복사해서 넘기기 : CallByValue 대표적으로 C언어가 추구하는 방식입니다. 한국어로는 값에 의한 전달 모든 파라미터는 값의 복사. 즉, 다른 공간에 같은 값을 생성해 전달합니다. 일단 전달이 이루어지면 전달하는 데이터의 ..
포인터 파트에서 함수 호출 구조에 대해 잠깐 언급한 적이 있습니다. 이 포스트에서 그 내용을 다뤄볼 것입니다. 프로세스의 구조 프로세스[# 프로세스는 운영체제의 로더에 의해 프로그램이 메모리에 올라갈 때 CPU가 실행할 수 있도록 구조를 변경하여 메모리에 올라가 있는 바이트 코드를 의미합니다.]는 Windows 기준으로 하여 아래와 같은 구조[# 정확한 구조는 아니니, 이런 식으로 구성되어 프로세스에 올라간다고만 생각하기 바랍니다. 이 스택 프레임은 플랫폼, 언어, 개발자 구현 방식에 따라 달라질 수 있습니다.]를 가지고 있습니다. 코드 세그먼트 기계어(명령어) 데이터 세그먼트 문자열 상수 목록 전역 변수 static 변수 엑스트라 세그먼트 힙(Heap) 스택(Stack) 코드 세그먼트: 코드 세그먼트에..
비트 연산자 : 메모리 크기 줄이기 최근 비트 연산자에 대한 질문을 들어온지라, 오늘은 비트 연산자에 대해 알아봅니다. 더보기 # 들어가기에 앞서.. 비트 연산자는 프로그래밍에 있어 고급 기술이라 분류할 수 있을 것 같습니다. 따라서 이해도.. pang2h.tistory.com 위 포스트 마지막에 비트 연산자로 함수에 값을 넘기는 이유에 대해 잠깐 살펴봤습니다. 함수에 값을 전달하는 방법은 여러 가지가 있습니다. 단순 값만 넘길 수도 있고, 참조를 넘길 수도 있습니다. 여기에선 '값'을 넘기는 방식이 아니라 값을 어떻게 넘겨야 잘 넘길 수 있을지를 알아봅니다. # 비트 연산자를 선행으로 알고 있어야 합니다. 함수에 값 전달하는 방식 우리는 일반적으로 인자 하나에 값 하나를 넘기는 1 대 1 방식을 취합니..
VS ERROR C4996 : SDL 오류 오늘은 scanf() 함수와 같이 입출력 함수, 문자열 함수를 다룰 때 종종 발생하는 C4996에 대해 다뤄봅니다. 원인 원래는 문제없이 컴파일되는 것이 맞지만, scanf() 등의 함수에서 발생 가능한 잠재적 문제점으로.. pang2h.tistory.com 위 C4996 경고가 발생했던 이유에 대해 알아보는 시간을 가져봅니다. 함수의 구조 함수의 구조부터 확인합니다. 일단, 간단히 strlen() 함수를 가지고 예시를 들어보도록 합니다. 아래는 예시를 위해 직접 작성한 strlen()과 동일 기능을 하는 함수입니다. int strlen(char* str){ int count = 0; while(1){ if (*str != 0) count++; else brea..