일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- 리뷰
- Direct2D
- 연산자
- Win32
- doit코틀린프로그래밍
- 이지스퍼블리싱
- CS
- c#
- VS ERROR
- Tips강좌
- c++
- c
- 김성엽
- Windows
- 알고리즘
- Javascript
- Tips프로그래밍강좌
- Desktop
- Visual Studio
- 함수
- Kotlin
- 포인터
- 문법
- 백준
- tipssoft
- 프로그래밍
- Programming
- 지식나눔강좌
- 티스토리
- Yesterday
- Today
- Total
목록DEV (265)
F.R.I.D.A.Y.
경고 예외 처리를 위해 코드상에 #pragma warning() 시리즈를 작성할 때가 있습니다. 괄호 안에 disable과 suppress가 들어갈 수 있는데, 두 경우는 어떤 경우에 사용되는지 알아보겠습니다. #pragma? 컴파일러의 기능을 제어하는 지시문입니다. pragma는 컴파일러마다, 운영체제마다 정의가 다를 수 있고 그에 따라 하는 작업도 다릅니다. #pragma warning(disable:4996) #pragma warning(suppress:4996) 두 지시문은 같은 기능을 합니다. C4996 경고를 해제해주는 지시문으로, 해당 지시문을 사용하면 프로젝트 설정 여하에 상관 없이 SDL 대상 함수(scanf 등)를 사용할 수 있습니다. disable 해당 옵션으로 사용하면 파일 내에 존..
오랜만에 돌아온 VS ERROR 시리즈입니다. 이번 시간에는 C6385 경고를 살펴봅니다. 문제 코드 #define _CRT_SECURE_NO_WARNINGS #include int main(void) { int arr[5] = { 0, }; for (int i = 0; i < 5; ++i) { scanf("%d", arr + i); arr[5] += arr[i]; // 오류 발생 위치 } return 0; } 원인. 접근 가능한 메모리 이탈 위 코드에서 접근 가능한 메모리 인덱스는 0부터 4입니다. 그런데 경고가 발생하는 위치에서는 인덱스를 5로 사용하고 있습니다. 따라서 범위를 수정해주면 정상적으로 경고가 사라집니다. C6201 경고가 함께 발생하는 것을 보니 일차원 배열에 대해서는 스택 범위까지 V..
안녕하세요, 이번에 Visual Studio 2019가 나왔습니다! UI가 변경되면서 기존 VS2017에서 프로젝트 만들기와 차이가 있을 것 같아 이렇게 포스트를 하게 되었습니다. 그럼 시작합니다. 참고사항 프로젝트 이름이나 소스파일의 이름에 한글은 지양해주세요. 예기치 않은 문제가 발생할 수 있습니다. SDL문제(C4996, scanf 빌드/컴파일 오류)는 다음 포스트를 참고하세요. 프로젝트 생성하기 프로그램을 시작하면 아래 이미지와 같이 시작 화면이 나옵니다. VS2017과 초기 화면이 달라서 기존 포스팅을 보고 난감해하실 수도 있겠네요. [시작] 항목의 [새 프로젝트 만들기]를 누릅니다. 빈 프로젝트를 선택하고 확인을 누릅니다. 이 때, 빈 프로젝트 속성으로 C++, Windows, 콘솔 이라고 작..
C언어의 반복문에 대해 알아봅니다. 일반적인 코드 작성 1부터 10까지 차근차근 더하는 코드를 작성해보겠습니다. #include int main(void){ int total = 0; total += 1; total += 2; total += 3; total += 4; total += 5; total += 6; total += 7; total += 8; total += 9; total += 10; printf("1부터 10의 합은 %d 입니다.\n", total); } 고작 더하는 값에 열 줄을 작성했습니다. 만일 더해야 하는 범위가 10까지가 아니라 100, 아니 그보다 더 큰 수라면 어떻게 하시겠어요? 이렇게 반복적으로 작업을 해야 하는 것은 많습니다. 그래서 반복문이 생겨났습니다. 반복문 이름 그대..
이전 시간에 람다식의 기초 부분을 배웠다면 이번엔 람다식을 조금 더 심도 있게 다뤄보겠습니다. 람다식의 이용 인자에 사용하기 인자에 사용하는 방법은 여러 가지가 있습니다. 이번에 소개하는 문법은 인자의 마지막에 들어가는 람다식은 소괄호 밖으로 빼낼 수 있다는 것입니다. 람다식 두 개를 인자로 받는 테스트 함수를 작성해보겠습니다. fun TestFunc(lamb1:()->Unit, lamb2:()->Unit){ lamb1() lamb2() } 이 함수에는 단순 출력을 하는 람다식을 넣을 것입니다. 코드를 단순하게 하기 위해서 받을 인자도, 반환하는 인자도 존재하지 않는 람다식으로요. fun TestFunc(lamb1:()->Unit, lamb2:()->Unit){ lamb1() lamb2() } fun m..
이전 시간에 우리는 고차 함수에 대해 배웠습니다. 함수를 인자로 넘기는 방법도 배웠죠. 그런데 이전 시간의 범위에는 포함되지만, 조금 더 많은 이야기를 위해 따로 빼놓은 것이 있습니다. 바로 람다식(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) } 인자로 들어가는 함수 앞에 함수 참조 기호(::)를 입력..
오늘 시간에는 컴파일러 최적화에서 대상 변수를 제외하는 volatile 키워드를 알아보겠습니다. volatile 휘발성의, 변덕스러운 등의 뜻을 가진 volatile은 사용되는 변수의 값 변경이 확실히 이루어져야할 때 사용합니다. 우리가 컴파일을 진행할 때, 컴파일러는 만들어지는 프로그램의 속도 향상을 위해 코드 최적화를 시행합니다. 코드 최적화 과정에서는 우리가 의도적으로 만든 코드가 일부 변경되기도하는데요, 그 과정에서 값의 대입이 무시되는 경우가 있습니다. 아래 코드를 보겠습니다. #include int main(void){ int var = 5; var = 3; var = 2; printf("var의 값: %d\n", var); return 0; } 이 코드에서는 int 타입의 변수 var에 처음..
위 이미지처럼 종종 숫자를 순서대로 나열하는 것이 아니라 지그재그로 출력하도록 하는 문제가 있습니다. 이 문제를 어떻게 해결하는지 알아보겠습니다. 수식 찾기 이미지의 숫자에 대한 정규식을 찾아보죠. 1, 3, 5번째 라인의 경우 x좌표[# 편하게 이야기해서 x좌표지 실제로는 column. 열이 되겠네요.]의 증가와 따라가는데 반해 2, 4번째 라인은 x좌표에 역행하는 것을 알 수 있습니다. 마구잡이로 식이 변경되는 것이 아니라 홀수 라인은 정방향, 짝수 라인은 역방향임을 알 수 있습니다. 따라서 우리는 아래처럼 수식을 만들 수 있겠네요. 홀수 라인 (현재 라인 번호 - 1) * 5 + (현재 x좌표) 짝수 라인 (현재 라인 번호) * 5 - (현재 x좌표 - 1) 프로그램에서는 0부터 시작합니다. 따라서..
이전 시간에 우리는 언어의 패러다임을 배웠습니다. 그 내용에는 일급 객체에 대한 내용도 함께 실려 있는데요, 이번 시간에는 일급 객체, 특히나 고차 함수에 대해 알아보겠습니다. 고차 함수 먼저 고차 함수가 무엇인지 알아보겠습니다. 고차 함수는 "함수를 인자로 사용하거나, 함수를 반환하는 함수"입니다. 달리 이야기하면, 일급 객체(일급 함수)를 서로 주고받을 수 있는 함수가 있다면 그 함수가 고차 함수가 되는 것입니다. fun main(args:Array){ TestFunc() } fun TestFunc(): Int{ return sum(2, 4) } fun sum(a:Int, b:Int) = a + b 이 코드에서는 TestFunc()가 고차 함수의 조건을 만족하고 있습니다. 함수를 인자로 활용하지는 않..
이전 파트의 끝머리에서 15번째 포스트는 람다식이 될 것이라고 했습니다. 그러나 람다식을 배우기 전에 꼭 알아두어야 할 필요가 있다고 생각한 것이 생겨서 람다식을 후순위로 미루게 되었습니다. 이번엔 함수형 프로그래밍이 무엇인지 알아봅니다. 언어의 패러다임 세상에는 많은 프로그래밍 언어가 존재합니다. C/C++, Java, C#을 시작으로 python, Go, Kotlin, Javascript[#ECMAScript 현재 JS는 기존의 오명을 씻고 표준을 잘 제정해 여태 이 언어를 싫어하던 개발자들도 포섭하는 행태를 보이고 있습니다. 이전의 JS와는 많은 차이를 보이고 있으니 관심 있게 지켜보셔도 좋습니다]까지. 이들 언어는 각자 필요에 의해 만들어진 언어로서 언어가 지향하는 방향과 그 패러다임이 다릅니다...