개발중인 오픈소스 프로그램이 하나 있다.

 

파일 리스트가 담긴 리스트 파일과, 해당 리스트와 매칭되는 '실제 파일' 을 비교하여 리스트 파일을 수정해주는 프로그램인데...

 

이를 1년전쯤에 만들었다가 면접에서 구조 지적을 한번 받고나서 (C++인데 왜 C 스타일로 짰느냐...) 리팩토링 작업중이었다.

 

프로그램의 중요한 부분 중 하나인, '리스트 파일을 읽어오는 함수' 를 재작업하는데 자꾸 프로그램이 다운되는 현상이 있어 문제를 체크해보다가... eof 체크도 넣어보고 했는데.

 

원인은 좀 다른곳에 있었다.

 

 

(표준 출력부가 존재하는 이유는 당연히 테스트용...)

 

요게 그 문제의 함수부.

 

string 변수인 tempinput에 파일 1줄을 읽어 저장하고, 해당 파일 라인에 'name' 이라는 키워드가 있는지 검사를 하는 구조이다.

 

name 키워드가 있어야 아래의 MidData 및 Convert가 작동을 하는데,

구조를 다시 생각해보니

File line Read -> npos Check -> (if true) Convert 의 구조로 진행되어야할것이

npos Check -> (if true) File line Read -> Convert로 돌아가고있는게 아니었는가.

 

그러니 자꾸 터지지...

오류를 수정하면서 모양도 조금 다듬었다. 

 

좀 이런 멍청한 실수는 안해야되는데... 참... 

 

밤이라 피곤해서 그랬다고 생각하자... 

'프로그래밍 > C/C++' 카테고리의 다른 글

포인터 변수 사용시 데이터 오염 문제  (0) 2020.11.28
Const 키워드.  (0) 2020.08.18
Visual C++에서 C++ 버전확인하는 방법.  (3) 2020.02.27
기록 #1  (0) 2020.01.18
Jsoncpp 라이브러리 사용 관련  (0) 2020.01.01

이전에 만들어 둔 프로젝트를 리빌딩 하다가 발견한것.

 

 

* 기본적으로 C++에서 현재 C++ 표준 버전을 확인하는건 이미 예약된 __cplusplus 매크로로 가능한것으로 알려져있다.

 

하지만 뭐가 문제인건지, Visual Studio에서 C++를 사용시, 현재 버전을 몇으로 설정하던 무조건 199711 (=C++98)로만 나온다.

 

검색해보니, 이것에 대한 원인은 못찾았고, 대신 해결방안을 찾았다.

 

https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus?view=vs-2019

 

/Zc:__cplusplus (Enable updated __cplusplus macro)

/Zc:__cplusplus (Enable updated __cplusplus macro) In this article --> The /Zc:__cplusplus compiler option enables the __cplusplus preprocessor macro to report an updated value for recent C++ language standards support. By default, Visual Studio always ret

docs.microsoft.com

해당 페이지에서처럼, /Zc:__cplusplus 명령어를 추가해주면, __cplusplus 매크로가 실제 버전에 맞게 잘 작동한다는 것이다.

 

자 그래서. 이걸 어디다 집어넣어야 하는가.

 

사용중인 Visual Studio가 한글버전이어서 살짝 헤멨는데, 이걸 검색해서 보는 분들은 조금이나마 덜 헤메시라고 남겨둔다.

 

 

1. 프로젝트 > 프로젝트 속성 클릭

맨 아래의 스패너모양을 누르면 된다.

 

2. 속성 > C/C++ > 명령줄 (=Commend Line)으로 이동.

 

3. 명령줄에 '/Zc:__cplusplus' 입력

그냥 뭐 이런식으로 집어넣으시고 적용누르시면 된다.

 

4. 체크

적용전

 

적용후 1 C++ 버전이 C++17로 인식되어 if문 아래의 구문이 활성화되었다.
적용후 2 C++ 버전을 14로 맞추었을때, C++14로 정상인식된다.

 

언젠가 좀 써먹을일이 있을거같아 기록해둔다.

'프로그래밍 > C/C++' 카테고리의 다른 글

포인터 변수 사용시 데이터 오염 문제  (0) 2020.11.28
Const 키워드.  (0) 2020.08.18
오늘의 실수.  (0) 2020.03.29
기록 #1  (0) 2020.01.18
Jsoncpp 라이브러리 사용 관련  (0) 2020.01.01

 

호출스택 뒤져보는걸 본격적으로 하는건 처음인듯.

 

지금까진 안해봤냐구요?

 

코드 길이가 짧아서 호출스택을 코드에서 직접 찾을수 있었거든요...

참고 블로그 : https://wergia.tistory.com/184

 

[Unity3D] UI 비법서 (4) - UI 개발자라면 제발 Rect Transform 애용합시다!

UI 비법서 (4) - UI 개발자라면 제발 Rect Transform 애용합시다! 작성 기준 버전 :: 2019.1.4f1 유니티 개발을 처음으로 공부하는 개발자들은 기본적으로 게임 오브젝트의 위치를 이동시키는 코드를 작성하려고..

wergia.tistory.com

 

 

UI 컴포넌트 간 위치 지정시 일반 Transform 좌표가 아닌 Rect Transform 좌표를 사용할것.

 

Rect의 기준점으로 사용될수 있는건 4가지 데이터가 있는데, Up, left, right, bottom 4가지.

 

Up / bottom은 y축 값, left, right는 x축 값이며,

 

up, right 는 offsetMax, bottom, left는 offsetMin값이다

 

즉, rect transform의 bottom이 필요한 경우

 

var rect = (rect 정보를 가져올 오브젝트).GetCompo.GetComponent();

foo(rect.offsetMin.y);

var rect = (rect 정보를 가져올 오브젝트).GetCompo.GetComponent();
foo(rect.offsetMin.y);

 

식으로 획득이 가능하다.

'게임 개발 > Unity' 카테고리의 다른 글

짧은 근황  (0) 2021.06.13
기록 #2  (0) 2020.05.09
분명 자주 쓰는데 자주 까먹는 기능들  (0) 2019.12.27

당연하게도 세팅을 위해서 라이브러리 추가를 해줘야 한다고 생각해서,

VS 프로젝트를 생성한 이후 추가메뉴를 찾다가 까먹어버린바람에...

'근데 얘들 기본 SDK로 들어왔으니까 있지 않을까?' 하고 바로 include를 시도해봤는데...

 

 

 

아니 이게 왜 다 있어?

 

DX10부터 12까지 다 있네요?

 

음...

 

아니 이러면 진짜 설치할 필요가 없었던거 아니었나? 

다이렉트 X 11의 경우 :

 

https://www.microsoft.com/en-us/download/details.aspx?id=6812

 

DirectX SDK - (June 2010)

Download the complete DirectX SDK, which contains the DirectX Runtime and all DirectX software required to create DirectX compliant applications.

www.microsoft.com

 

MS 공식홈페이지에서 DX11 sdk를 설치한다. (왜 2010년이 마지막인지는...)

 

그리고 Windows 10 SDK를 설치해줘야하는데...

 

 

Visual Studio 2017 이후 버전을 사용하시는 사용자들의 경우, 설치 옵션에서
'C++를 이용한 게임 개발' 을 활성화 하셨다면, 자동으로 Windows 10 SDK 까지 설치가 되어있을겁니다.

 

 

이 경우에는 추가적인 설치를 하실 필요는 없습니다만, SDK 가 설치되지 않았을 가능성이 있으니 해당 항목을 확인해줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

...라고 기껏 써놨는데 검색해보니 Direct X 11.x 이후부터는 전부 Windows 10 SDK에 포함이라네요.

생각해보니 굳이 구버전 Direct X를 쓸 필요가 있긴 했나 싶긴 했습니다...

 

어쩐지 에러뜨더라...

 

역시 모르면 당해봐야 제맛

에러 해결법도 '최신 버전을 삭제하고 설치후 최신버전 재설치하세요' 라고 하니, 심각한 문제가 발생하기 전까지는 Windows 10 SDK에 탑재된 버전을 이용하는것으로 하겠습니다.

 

최신 버전 설치 및 사용 안내는 다음 링크를 참고바랍니다 :

https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/directx-12-programming-environment-set-up

 

Direct3D 12 프로그래밍 환경 설정 - Win32 apps

생산성 높은 Direct3D 12 개발 환경을 구성하는 설치, 도구 및 지원되는 라이브러리를 설명합니다.

docs.microsoft.com

 

P.S : DX11.x

https://docs.microsoft.com/en-us/windows/win32/api/_direct3d11/

 

Direct3D 11 Graphics - Win32 apps

Direct3D 11 Graphics 01/11/2019 48 minutes to read In this article --> Overview of the Direct3D 11 Graphics technology. To develop Direct3D 11 Graphics, you need these headers: For programming guidance for this technology, see: Enumerations Functions Title

docs.microsoft.com

 

발췌 : 이펙티브 C++

 

template<unsigned n>
struct Factorial {
	enum { value = n * Factorial<n - 1>::value };
};
template<>
struct Factorial<0> {
	enum { value = 1 };
};

TMP 구조로 작성된 팩토리얼 코드.

 

 

 

Factorial<n> fact;

std::cout << fact.value << std::endl;

* unsigned로 처리 시 32bit / 64bit 상관없이 17!에서 오버플로우, 18!에서부터 (VS기준) C4308 에러코드 발생

 

 

18!를 넘는 수를 계산할 수 있게 하려면 어떻게 해야하는지 연구가 필요해보임.

'프로그래밍 > C/C++' 카테고리의 다른 글

포인터 변수 사용시 데이터 오염 문제  (0) 2020.11.28
Const 키워드.  (0) 2020.08.18
오늘의 실수.  (0) 2020.03.29
Visual C++에서 C++ 버전확인하는 방법.  (3) 2020.02.27
Jsoncpp 라이브러리 사용 관련  (0) 2020.01.01

면접 탈락 질문

 

1. 온라인 멀티플레이 게임에서 클라이언트에게 화면을 보여주는 원리

2. '레이 캐스트' 설명 및 구현

3. C++ / C#의 차이

4. C++ 32bit / 64bit 이론적 차이 및 구현방식 차이

5. inline을 써도 되는곳, 써야만 하는곳, 써서는 안되는곳 구별

6. Rest API에 대해 (수박 겉핥기식 말고 제대로 설명하기)

7. CNN 계열에 대한 기본적인 설명 및 세부 분야들

+ Recent posts