본문 바로가기

프로그래밍/C++

(7)
[C++] 매크로에서 반복문 조건이 작동하는 방식 C++에서는 다음과 같이 매크로를 사용할 수 있다. #include #define FOR(i, N) for(int i = 0; i < N; ++i) using namespace std; int main() { FOR(i, 10) cout
Visual Studio에 OpenGL 설치하기 이것 참 설치하기 어렵다. 그래픽 드라이버를 설치할 때 자동으로 설치된다고는 하지만 VS에서는 안 되는걸... ※ 나중에 알게 됐지만, 그래픽 드라이버를 설치할 때 자동으로 설치되는 파일은 OpenGL32.dll이다. glut32.dll이 아니다! 간략하게, 다음 파일들을 다운로드 하자. 1. freegult.zip 아래 링크에서 freeglut 3.0.0 MSVC Package 부분에 있는걸 다운로드 하자. https://www.transmissionzero.co.uk/software/freeglut-devel/ freeglut Windows Development Libraries Introduction Whilst at the University of Essex, I took a module call..
[C++] 새로 알게 된 사실 몇 가지 (계속추가예정) 1. 전역배열을 선언하면 자동으로 0으로 초기화된다. 2. STL 관련 정의오류는 적절한 Container 조합을 썼는지 확인하자. 예를 들어, priority_queue의 Container가 들어갈 인수 자리에 queue를 넣으면 초기화 과정 중 begin 함수가 없어서 컴파일 오류가 발생한다. 3. algroithm 헤더 내 함수들과 내장 함수를 구분해 쓰자. 예를 들어 내장함수 qsort는 STL Container를 지원하지 않는다. 4. C++17부터 튜플을 다음처럼 쓸 수 있다. auto [a, b, c] = make_tuple(1, 2, 3); 5. typedef tuple Vector3 와 같은 표현으로 using Vector3 = tuple가 있다. - 둘의 차이라면, using에서는 템플..
[C] 백준 풀 때 Tip. 답안 검토 시 파일로 입력 넣기 백준 풀면서 답안을 검토할 때 하는 것 중 하나가 입력의 최대치를 넣어보는 것이다. 이를 통해 시간초과가 발생할지, 값이 이상해지지는 않는지 확인할 수 있다. 하지만, 입력이 100만개씩 되는 경우가 있는데 이를 복사&붙여넣기를 하거나 일일이 입력할 수도 없는 노릇이다. 이 때 파일을 통해 입력하면 편하다. 1. 입력파일 생성하기 우선, 입력에 쓰일 파일을 만들 코드를 짜야한다. 18111번: 마인크래프트를 예시로 하면, 입력 코드를 아래처럼 구성할 수 있다. #include int main() { printf("500 500 6500000\n"); for (int i = 1; i [원하는 경로]\Input.txt 왼쪽 경로는 해당 소스파일을 컴파일 한 뒤의 생성된 파일이다. 가운데에는 '>'를 공백을 ..
[C++] 비주얼스튜디오(VS)에서 발생하는 scanf 오류 해결하기 VS에서 scanf를 사용하려고 하면 아래와 같은 경고, 오류 메세지가 나온다. ⚠ C6031 반환 값이 무시되었습니다. 'scanf'. 🚫 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 방법은 여러가지가 있다. 첫 번째로 위 오류 메세지에서 권고한 옵션을 적용하는 것이다. 코드 맨 위에 아래 코드를 한 줄 추가하면 C4996 오류 메세지가 없어지며 컴파일이 된다. #define _CRT_SECURE_NO_WARNINGS 하지만, C6031 경고 메세..
[C++] 삼항연산자를 중첩해서 쓸 때 주의할 점 가령, 정수형 변수 A, B, C, D 중 최솟값을 출력하려는 경우 코드를 다음과 같이 작성할 수 있다. #include using namespace std; int main() { int A, B, C, D; scanf("%d %d %d %d", &A, &B, &C, &D); int min = A < B ? A : B; min = C < min ? C : (D < min ? D : min); printf("%d", min); return 0; } 얼핏보면 문제가 없어 보인다. 하지만 문제는 다음 코드에 있다. min = C < min ? C : (D < min ? D : min); D < C < min인 경우 위 코드의 결과는 아이러니하게도 C가 된다. 왜냐하면 C와 D의 비교가 이루어지지 않기 때문이..
[C++] HEAP_CORRUPTION_DETECTED HEAP_CORRUPTION_DETECTED: after Normal block (#78) at 0x00DE52F8. CRT detected that the application wrote to memory after end of heap buffer. 흔히 문자열을 다룰 때 종종 마주치는 에러다. 허용되지 않은 메모리 영역에 접근해서 나타나는 에러다. 위 에러는 다음과 같은 코드에서 발생할 수 있다. #include using namespace std; int main() { char* text = new char[10]; scanf("%s", text); delete[] text; return 0; } 위 코드에서 길이가 10 이상인 문자열이 입력되면 문제가 된다. 문자열의 끝에는 '\0'이라는 널문..