일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- Programming
- c
- 포인터
- 문법
- Desktop
- 이지스퍼블리싱
- doit코틀린프로그래밍
- Tips프로그래밍강좌
- CS
- 배열
- 백준
- c++
- VS ERROR
- c#
- Tips강좌
- 김성엽
- Win32
- 리뷰
- 프로그래밍
- Visual Studio
- 지식나눔강좌
- Kotlin
- Javascript
- Windows
- tipssoft
- Yesterday
- Today
- Total
목록All (384)
F.R.I.D.A.Y.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/czXKsb/btquQwDHDCj/jLCcj102MiTEfA77P19qK1/img.png)
오늘 시간에는 for 사용시 잘못 사용할 때 2019인텔리센스가 제공하는 C6292 경고를 살펴봅니다. C6293 경고는 이곳을 참고하세요. 그나저나 이젠 이런 것도 경고를 해주네요 :) 원인. 조건식에 맞지 않는 증감식 원인이 되었던 코드는 다음과 같습니다. for (int i = 100; i > 0; ++i) { } 코드상에선 i값이 작아져야하지만 계속해서 증가하고 있습니다. 물론 오버플로우가 발생하면 멈추겠지만 제대로 된 결과가 나올리는 없습니다. 해결1. 증감식 수정 이 경고는 증감식을 수정하거나 조건식을 수정하는 방법으로 제거할 수 있습니다. 그러나 일반적으로는 조건식에 맞추어 코드를 작성하고 증감식을 틀린 경우가 많습니다. for (int i = 100; i > 0; --i) { } 코드에 맞..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/doF58x/btquMBqn3k3/GAzd1KUb03QWXRdoFBGek1/img.png)
이전 마방진 포스트에서 배열 선언은 x-y가 아니라 y-x순으로 작성하는 것이 효율적이라고 말씀드린 적이 있습니다. 오늘은 어째서 y-x순이 더 효율적인지에 대해 포스트합니다. 홀수 마방진 풀기 이웃 학부에서 홀수 마방진 프로그램을 과제로 받았단 소식을 접하고 동아리 개강총회가 끝나고 시간 들여서 만들어봤습니다. 다른 사람들의 코드와는 달리 굳이 수식을 계산하고 할 필요 없이 그냥 즉흥적으로 생.. pang2h.tistory.com 메모리 구조 먼저 이 문제를 알아보기 전에 메모리 구조를 알아볼 필요가 있습니다. 메모리 구조를 다루는 포스트가 아니니 이번엔 정말 단순하게만 설명합니다. 컴퓨터에서 메모리라고 한다면 일반적으로는 RAM(주기억장치)을 지칭합니다. 이 메모리라는 것을 운영체제는 선형으로 관리합..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bMljOY/btquJGy5HEN/Cgr4aqEiP7Tw7UWf3EhFA0/img.png)
Visual Studio가 2017에서 2019로 넘어오며 인텔리센스가 더욱 정교화됐습니다. 이러한 인텔리센스의 업그레이드로 2017에선 하지 않던 경고가 2019에선 하는 경우가 많아졌는데, 이번에 소개할 경고도 같은 경우입니다. 이번 포스팅에서는 C6011 경고가 왜 생기고 어떻게 하면 사라지게 할 수 있는지 알아봅니다. 원인. 잠재적 버그 가능성 #include #include int main(void) { int* p = (int*)malloc(sizeof(int) * 10); for (int i = 0; i < 10; ++i) { p[i] = i + 1; } free(p); return 0; } 대부분의 컴퓨터에서는 문제가 발생하지 않을 코드이지만, 이 코드도 결국 잠재적인 문제를 일으킬 수 있..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FLgy6/btquy1a4XrA/ZUkvNa6uREeSyPVPFanyn1/img.png)
일반적인 경우에는 잘 사용하지 않지만, 그렇지만 종종 사용하게 되는 접미사에 대해 배워봅니다. 구글에 '접미사'를 검색하면 아래와 같은 결과나 나오네요. 여느 언어처럼 C/C++에도 접미어, 접두사가 있습니다. 이번 시간은 접미어를 알아보죠. 접두사는 다음에 알아보는걸로! 접미사 정수 상수는 int, 실수 상수는 double이 기본형이라고 지난 포스트에서 말했습니다. 그렇다면 다른 자료형으로 정수나 실수 상수를 선언하려면 어떻게 할까요? 이런 상황때문에 접미사가 탄생했다고 보면 되겠습니다. C/C++에서도 접미사는 자연어와 마찬가지로 어떤 단어나 성분 뒤에 붙게 됩니다. 정수나 실수 상수(리터럴)이 성분이라고 보면 될것같습니다. 접미사의 종류 접미사는 여러가지가 존재합니다. 자료형 접미사 unsigned..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/APjUN/btquvPazGtI/lsX4PH3MrKFGJ3I45pHk00/img.png)
많은 프로그래머들이 작성된 코드로 인해 발생하는 각종 문제들에 골머리를 앓고 있습니다. 현업 개발자뿐만 아니라 일반 학부생, 아마추어 개발자들도 예외는 아닌데요, 오늘 포스팅에서는 이러한 버그를 잡는 방법중 하나인 assert에 대해 알아봅니다. 버그의 종류 먼저 버그의 종류를 알아보죠. 버그는 크게 두 가지 종류로 나뉩니다. 문법상 코드를 잘못 작성해 발생하는 문법오류(Syntax Error)와 문법상 문제는 없지만 예상치 않은 결과가 발생하는 논리적 오류(Logical Error)입니다. 여기서 잡기 힘든 코드는 논리적 오류입니다. 문법 오류의 경우 IDE의 인텔리센스가 잡아서 경고를 띄워주기도, 컴파일이 되지 않는 방법으로 사전에 알 수 있지만, 논리적 오류는 코드상 문제가 아니라 들어온 데이터, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b6toJA/btqugSS9BiI/64W0XIsWidGjTBBIM2w4W0/img.png)
C언어는 다양한 자료형이 있습니다. 서로 다른 두 자료형을 연산해주기 위해서는 어느 한 자료형을 다른 자료형으로 형변환(캐스팅, casting) 해주어야 연산을 진행할 수 있습니다. 오늘은 자료형, 특히 숫자 자료형의 형변환에 대해 알아보겠습니다. 상수의 기본형 형변환을 알아보기 전에 숫자 상수의 기본 타입을 알아야합니다. C언어에서 숫자라 함은 일반적으로 정수(char, short, int 등)와 실수(float, double 등)로 나누게 됩니다. 첫 순서로 정수형 상수의 타입을 알아봅시다. char ch1 = 65; short wch1 = 300; int var1 = 900; int var2 = 12'000; // 숫자가 길면 이렇게 홑따옴표(')로 구분할 수 있습니다. 이 상수들의 타입은 무엇일가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgCXAe/btqud6KVX1g/rs4KRCIJTnTFAyD7N0SWfK/img.png)
아래 코드를 컴파일러에 올리면 C1075 오류가 나옵니다. 이번 시간에는 C1075오류가 왜 나오는지 알아봅시다. #include int main(void) { printf("Hello world!\n"); int a = 5, b = 3; if (a < b) { } else { if (a == b) { } else { } return 0; } 원인 이 문제의 원인은 중괄호의 짝을 맞춰주지 않았기 때문입니다. 대부분의 프로그래밍 언어는 중괄호를 기준으로 변수의 생명주기, 연산을 진행할 코드가 결정됩니다. 해결 중괄호 짝을 맞춰주면 됩니다. #include int main(void) { printf("Hello world!\n"); int a = 5, b = 3; if (a < b) { } else { if..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IHoYi/btqubCwNZQK/JnGpiKlTxd9SyrjLXnwBx0/img.png)
이번엔 C6001, 초기화되지 않은 메모리 'variable'을(를) 사용하고 있습니다. 경고를 살펴보겠습니다. 원인 변수를 사용하기 전에 메모리에 남아있는 쓰레기 값을 지우지 않고 그대로 사용해서 발생하는 문제입니다. 쓰레기 값을 그대로 사용하면 예상외의 결과가 나올 수 있기 때문에 초기화를 해주어야 한다는 경고를 표시합니다. 해결: 변수 초기화 하기 경고 메시지에서 표시한 변수를 초기화 해주면 해결됩니다. 이 코드에서는 var1이 문제가 되니 아래 코드처럼 선언과 동시에 0으로 초기화해주면 되겠네요. 일반적으로 0을 대입해 초기화하라고 하지만, 필요에 따라 특정 값으로 초기화할 수도 있습니다. #include int main(void) { int var1 = 0; var1 += 5; printf("%..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QFVIX/btqudsGIKWp/6I5lbHM8tfSMIgLt3fsmpK/img.png)
변수를 사용하는 것만큼, 중요한 것이 변수 초기화 과정입니다. 이 포스트에서는 변수 초기화는 무엇이고 언제 초기화를 해야 하는지 알아봅니다. 초기화란? 먼저 시작에 앞서 초기화는 무엇인지 알아봅니다. 네이버 지식백과에선 초기화를 다음으로 정의하고 있습니다. 컴퓨터 프로그램의 최초 또는 미리 정해진 계수, 스위치, 주소, 기억 장치의 내용 등을 '0' 또는 기타의 값으로 설정하는 것. 일반적으로 설명을 할 때는 이렇게 말을 하곤 합니다만, 저는 다른 정의를 말씀드리고 싶습니다. 변수의 값을 예측 가능한 값으로 만드는 것. 실제로 변수는 메모리에 위치하는데, 메모리는 PC내 모든 프로그램이 공유해 사용합니다. 내 프로그램이 사용하기 전에 다른 프로그램이 사용했을 수 있다는 것입니다. 이러한 특성 때문에 메모..