본문 바로가기

CPP

(9)
Visual Studio 에서 utf-8 인코딩된 소스코드 사용하기. 리눅스 플랫폼에서 개발된 c/c++ 소스코드를 컴파일할 일이 생겼다. 한국어 윈도우에서 visual studio 2015 로 프로젝트를 만들어 컴파일하여 돌려보니, 가져온 소스코드의 인코딩이 cp949 가 아닌 utf-8 이어서 메시지가 깨져서 나왔다. 소스 자체의 인코딩을 바꾸어 주는 방법도 있었지만, utf-8 소스를 그대로 유지하고, visual studio 2015 프로젝트 세팅을 변경하여 사용하고 싶었다. 찾아보니 그런 방법이 있었다. https://docs.microsoft.com/ko-kr/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-140 /utf-8(소스 및 실행 파일 문자 집합을..
[EP019] 윤년 1901년 1월부터 2000년 12월까지 중에서 1일이 일요일인 달의 갯수를 구하는 문제. 윤년을 구하는 조건이 주어지고, 그 조건만 잘 써 주고, mod 7을 이용하면 요일을 구할 수 있다. // leap_year.cpp : Defines the entry point for the console application. // /* http://projecteuler.net *____________________________________________________________________ Problem 19 14 June 2002 You are given the following information, but you may prefer to do some research for yourself. ..
[VCPKG] VCPKG OFFLINE 사용하기 python pip의 편리성에 익숙해진 사람(나)들은 cpp 오픈소스 라이브러리들을 빌드하며 무수히 머리털을 뽑아냈다. (너무 고달펐음. 빌드뿐 아니라, 라이브러리, 인클루드 패쓰 설정하고 하는 것도)마이크로소프트에서 visual studio 에 오픈소스 라이브러리들을 매끄럽게 통합시키는 vcpkg 라는 툴을 (이미 몇년 전에)개발했다는 걸 알았다. 이걸 테스트해 보려고 하고 있는데...안타깝게도, vcpkg 는 vcpkg install zlib 와 같은 명령을 때리면, 오픈소스 라이브러리 소스를 네트워크를 통해 다운로드 받아와서, 빌드를 진행한다.그래서, 인터넷 연결이 되지 않는 내 주 개발환경에서는 vcpkg 를 쓸 수 없는 것인가 하고 낙담하고 있는 중에, 다음과 같은 글을 reddit 에서 발견했..
[번역|스택오버플로우] 타입명 뒤에 괄호를 붙이는지 안 붙이는지에 차이가 있나? https://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new [질문] by David ReadTest 가 보통 클래스라면, 아래 두가지에 차이가 있나? Test* test = new Test; Test* test = new Test(); [3번 답변] by bayda 일반적으로 첫번째 것은 디폴트-초기화, 두번째 것은 값-초기화가 된다. 예를 들어 int (POD 타입)의 경우int* test = new int - *test의 값은 무엇이라도 될 수 있다.int* test = new int() - *test 의 값은 0이 될 것이다. 이외의 동작은 Test 타입이 어떤 것..
[VS] LINK : warning LNK4075: '/INCREMENTAL'이(가) '/LTCG' 사양으로 인해 무시됩니다. https://blogs.msdn.microsoft.com/vcblog/2013/10/29/the-visual-c-linker-best-practices-developer-iteration/ 에서 발췌하여 번역함. LINK : warning LNK4075: '/INCREMENTAL'이(가) '/LTCG' 사양으로 인해 무시됩니다. LINK : warning LNK4075: ignoring ‘/INCREMENTAL’ due to ‘/LTCG’ specification 링크타임 코드생성 (/LTCG , `L`ink-`T`ime `C`ode `G`eneration) 옵션은 링커에게 전체 프로그램 최적화를 하게 한다./LTCG 로 활성화되는 최적화의 흔한 예는 모듈간의 함수 인라인화이다. 많은 기타 링커 최적화..
CPP/STL const map 객체에 [key] 접근시 에러 #include #include #include int _tmain(int argc, _TCHAR* argv[]){std::map dict1({ { "AAA", { 1, 2, 0, 0 } },{ "B", { 2 } }});const std::map dict2({{ "abc", { 3, 3, 1, 0 } },{ "def", { 0 } }}); // okstd::vector v1 = dict1["AAA"]; // compile error!// ref : http://stackoverflow.com/questions/15614735/why-stdmapint-float-cant-use-operator-error-c2678// dict2 가 const 로 정의되어 있음.// [ 연산자는 자동으로 새로운 key, ..
[CPP] 포인터인자와 레퍼런스인자 함수 생성 asm 비교. 함수의 인자를 레퍼런스로 주었을 때와 포인터로 주었을 때, 생성되는 asm 코드는 어떻게 다를 지 궁금했다.매우 간단한 함수를 만들고, VS2008 에서 최적화 없이 asm 코드를 생성하여 비교하였다. 1. 소스 f1 은 레퍼런스도 포인터도 사용하지 않은 기본형을 그대로 인자로 준 함수. f2 는 모든 인자를 포인터로 넘긴 것, f3 은 레퍼런스로 인자를 넘긴 것이다. f2, f3 이 asm 으로 어떻게 해석되어 생성될 지 궁금했는데, 왼쪽이 f2 의 호출부분 (==== 바 위쪽) 과 f2 의 몸체. 오른쪽이 f3 의 호출부분과 몸체이다. asm 을 소스와 함께 생성했기 때문에, 비교하기 편리하고, 잘 살펴보면, 노랗게 다르다고 표시된 부분은 모두 원 소스 부분 뿐이다. 생성된 asm 코드 자체는 (호출..
[WINDOWS] DLL 매핑 주소 알아보기 김성우 해킹, 파괴의 광학 6장 예제 살짝 변형해서 실행해 보고, sysinternals vmmap 툴로 비교해 봤다. 결과는 간단히 아래 캡쳐를 보라.