일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Tips프로그래밍강좌
- 함수
- 리뷰
- Tips강좌
- 이지스퍼블리싱
- CS
- 지식나눔강좌
- 김성엽
- doit코틀린프로그래밍
- Win32
- tipssoft
- 포인터
- 연산자
- c#
- Direct2D
- Visual Studio
- c
- 문법
- Javascript
- c++
- 프로그래밍
- VS ERROR
- Desktop
- 티스토리
- 알고리즘
- Windows
- 백준
- 배열
- Kotlin
- Programming
- Yesterday
- Today
- Total
목록c (65)
F.R.I.D.A.Y.
C/C++로 작성한 Win32 프로그램의 exe 파일 아이콘 변경하기 리소스 파일 추가 아이콘 변경을 위해서는 리소스 파일을 추가 해야한다. 프로젝트에서 [새 항목 추가 - 리소스 - 리소스 파일]을 선택해 프로젝트에 추가한다. 리소스 뷰[# Ctrl + Shift + E]에서 리소스를 추가한다. 프로그램의 아이콘을 변경할 것이므로 아이콘을 추가한다. 가져오기를 통해, 원하는 아이콘을 별도로 추가할 수도 있다. 추가가 완료되면 세 번째 사진과 같이 IDI_ICON1 등의 추가된 아이콘이 발생함을 알 수 있다. 이제 솔루션 탐색기[# Ctrl + Alt + L]에서 Resource.rc의 코드 보기[# F7]를 통해 코드 편집을 한다. 코드 편집기를 열면 오른쪽 이미지와 같이 리소스 관련 내용이 소스코드 ..
사용자 지정 서식지정자를 구현해 printf 이진수 출력하기 printf는 C언어의 스탠다드 라이브러리에서 출력을 담당하는 함수로 서식 지정자를 가지고 있다. 서식지정자 printf는 기본적으로 바이너리 출력을 지원하지 않는다. 즉, 이진수 출력을 지원하기 위해서는 따로 함수를 만들어 별도로 작성을 하거나, 직접 printf의 모든 기능을 구현하면서 이진수 출력에 대한 코드를 넣어서 라이브러리를 새로 만들어야한다. 이진수 출력의 문제나, 혹은 직접 커스텀 서식지정자를 만들고 싶을 때도 동일하게 발생하는 문제다. 이진수 출력용 서식지정자 정하기 제공되는 서식지정자에는 이진수 형식으로 출력을 지원하는 서식지정자를 제공하지 않으므로, 새로운 함수를 만들어 기존 printf 함수와 혼용해 코드를 작성하면 그 길..
회전한 사각형을 외접하는 사각형 구하기 회전 사각형 이미지처럼 회전각이 존재하는 사각형은 그 외부에 해당 사각형을 포함하는 사각형을 그릴 수 있습니다. 해당 사각형을 구하는 방법을 알아봅니다. 여기서부터 회전각을 가진 사각형을 포함하는 사각형[# 빨간색으로 되어 있는 사각형]을 외접 사각형이라 명명합니다. 삼각함수 외접 사각형을 구하는 방법은 피타고라스 방정식을 이용하는 것입니다. 빗변 길이의 제곱은 가로 길이의 제곱과 세로 길이의 제곱의 합으로 이루어진다는 방정식을 이용하면 외접 사각형을 구할 수 있습니다. 80도 만큼 회전한 사각형이 있습니다. 그럼 빨간색으로 강조된 삼각형이 형성됩니다. 해당 부분의 가로축과 세로축은 COS와 SIN 삼각함수를 이용하면 구할 수 있습니다. 여기에서 COS에 적용할 각..
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, 아니 그보다 더 큰 수라면 어떻게 하시겠어요? 이렇게 반복적으로 작업을 해야 하는 것은 많습니다. 그래서 반복문이 생겨났습니다. 반복문 이름 그대..
오늘 시간에는 컴파일러 최적화에서 대상 변수를 제외하는 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부터 시작합니다. 따라서..
함수 포인터 또한 자료형입니다. 모든 자료형은 배열로 만들 수 있다고 했는데요, 이번에는 함수 포인터 배열을 만들어봅니다. # 배열, 함수 포인터를 먼저 알고 있어야 합니다. 선언 방법 먼저 배열의 선언 방법을 되돌아봅니다. type arrayName[length]; // ex) int arr[10]; 함수 포인터의 선언 방법은 다음과 같습니다. returnType (*var)(parameters); // ex) int (*user_abs)(int); returnType: 함수 포인터로 가리킬 함수의 반환형 parameters: 함수 포인터로 가리킬 함수의 인자 만일 printf를 가리킬 수 있는 함수 포인터 배열을 선언하고자 한다면 아래와 같이 작성하면 됩니다. int (*fp)(const char *..
포인터는 신기하게도 함수까지 가리킬 수 있습니다. 어차피 이름이 있으니 이름으로 사용하면 될 텐데 뭐가 좋으냐는 생각을 할 수 있겠지만 이번에 그 생각이 바뀌실 겁니다. # 포인터에 대한 내용을 알고 있어야 합니다. 정적인 것은 싫어요 무엇이든 코드에 명시되어 있다면 이를 수정하기 위해서는 전부 다시 컴파일을 진행해야 합니다. 그러나 포인터를 이용한다면 포인터만 명시되어있지 포인터가 가리키는 내용은 코드에 명시하지 않도록 할 수 있습니다. 따라서 포인터를 사용하면 컴파일을 하지 않고도 실제 작업 내용의 변경이 가능[# 게임을 예로 들면 사소한 버그는 패치로 바로잡곤 합니다. 그런 것이라고 보면 됩니다.]합니다. 함수도 마찬가지입니다. 함수 포인터 함수 포인터는 말 그대로 함수를 가리킬 수 있는 포인터입니..
이번 시간에는 구조체에서 사용하는 비트 필드에 대해 알아봅니다. 원래 구조체를 설명하고 곧바로 시작할 생각이었는데 공용체 문법에서 먼저 나오게 되었네요 :| # 비트 필드 연산자는 공용체에서도 사용할 수 있어요. 정수 자료형 C언어 자체에서 제공하는 정수 자료형은 기본적으로 다섯 가지[# char, short, int, long, long long]입니다. 주로 int를 사용하지만 가끔씩 long long 자료형을 사용하기도 하지요. long long은 64비트 자료형으로 그 크기는 이미지와 같이 거대한 값을 저장할 수 있습니다.. Min : -9,223,372,036,854,775,808[# 약 -920경] Max : +9,223,372,036,854,775,807[# 약 920경] 그러나 우리는 이렇..
하나의 공간을 여러 용도로 사용하는 경우가 있습니다. C언어에도 그러한 공간을 만들 수 있도록 문법을 제공하고 있는데요. 오늘 시간에는 공용체(union, 유니온) 문법에 대해 알아봅니다. # 구조체를 먼저 배우고 오면 더욱 좋습니다. 공유하는 공간 회의장이 있다고 생각해봅시다. 이 회의장은 넓어서 행사를 개최할 때도 사용하고 여러 사람들이 모여 아이디어를 펼치는 아이디어룸으로 사용할 수도 있습니다. 어떤 시안에 대해 회의를 할 때도 사용하기도 하죠. 학교에선 다목적 강당으로 생각해도 좋을 것 같습니다. 이 회의장을 하나의 용도로만 사용해야 한다면 다른 용도를 위한 공간을 계속해서 만들어야 하니 비용이 많이 들 것입니다. 공용체(union) 선언하기 공용체 문법은 아래와 같이 기본 구성을 가지고 있습니다..