검색결과 리스트
프로그래밍/C++ 에 해당되는 글 54건
- 2019.03.19 LNK1123: COFF로 변환 오류 3
- 2019.01.23 XML 저장 후 로딩이 되지 않는 이유
- 2018.12.18 클래스 메서드 포인터 파라미터 사용 방법
- 2018.12.03 Visual Studio 버전 표
- 2018.11.29 VS2015 LNK2001 _vsnprintf 오류 3
- 2018.05.17 Range based for
- 2018.02.08 배치 파일에서 for 문에 변수 설정 방법
- 2017.12.22 배치 파일 네트워크 연결
- 2017.08.10 코드 품질 vs 아키텍처 품질
- 2017.07.11 코드 리뷰
- 2017.03.14 uafxcwd.lib; libcmtd.lib 중복 선언 및 링크 오류
- 2017.02.07 Visual Studio 이전 스타일 설정
- 2016.10.18 printf 인자
- 2016.09.20 스마트 포인터의 종류
- 2016.09.20 스마트 포인터 사용 방법 예제
LINK : fatal error LNK1123: COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다.
이런 글자가 나올 때 다음과 같이 해결하면 된다
원인 : 두 개 이상 다른 버전의 Visual Studio를 설치했기 때문
cvtres.exe 파일의 중복 존재
해결 방법 :
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
위의 두 군데에 cvtres.exe 파일이 존재하는데 첫 번째 경로에 있는 cvtres.exe 파일을 다른 이름으로 변경하던지 삭제한다
경로를 저장할 때 텍스트에서 \\를 \로 인식한다
따라서 XML에 저장할 때 \로 저장한다
다시 로딩할 때 \\가 되어 있어야 하는데
\를 읽어들이기 때문에 파싱을 실패하여 로딩이 제대로 되지 않는다
* 해결 방법
- 저장할 때 \\ 를 \\\\로 변경하여 저장한다
함수 포인터는 많이 올라와 있지만
클래스 메서드 포인터를 파라미터로 사용하는 방법은 많이 없어서
내가 자주 사용하기 위해 올린다
클래스 헤더 파일
클래스 소스 파일
실제 사용 파일
VS2010에서 VS2015로 마이그레이션하면 다음과 같은 버그가 생성된다.
LNK2001 _vsnprintf 외부 기호를 확인할 수 없습니다
그럴 때는 이전 라이브러리가 호환되지 않기 때문에 그렇다
속성 - 구성 속성 - 링커 - 입력 - 추가 종속성
에 다음을 추가한다
legacy_stdio_definitions.lib
setlocal enabledelayedexpansion
for /f "delims=" %%i in (%input_file) do (
set one_line=%%i
set var=!one_line:8,18!
echo !var!
)
for 문 내에서는 %one_line% 대신 !one_line! 을 사용한다
네트워크 폴더로 접속하려면 다음과 같이 한다
net use [ip 주소] /user: [아이디] [암호]
예제
set MyPath=\\100.120.12.247
net use %MyPath% /user: jmlee 1234
mkdir %MyPath%\재만재만
* 한글 경로가 깨지면 인코딩 UTF-8 대신 ANSI 로 NotePad++에서 변경
* 날짜
echo 날짜 : %date%
echo 시간 : %time%
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
echo %YEAR%
echo %MONTH%
echo %DAY%
pause
* 코드 품질
- 함수 복잡도
- 함수 간 호출 관계
- 전역 변수 수
- 함수 및 모듈 수
- 사용되지 않는 변수 및 함수
* 아키텍처 품질
- 요구사항 및 설계 문서 상태
- 모듈 간 호출 관계
- 모듈화 상태
- 아키텍처 스타일
- 아키텍처와 모듈 재사용성
* 반복하지 않기
- 같은 코드가 중복된다면 수정도 여러번 해야 한다
* 한 가지만 하기
- 함수는 한가지를 해야 한다
- 그 한가지를 잘해야 한다
- 그 한가지만을 해야 한다
* 의미있게 이름 짓기
* 코드리뷰에 대한 오해
- 버그를 발견하는 것을 보장하진 않는다
- 코드의 결함을 찾는 것이 목적이 아니라, 서로 배우고 가르쳐 주고, 팀의 협업능력을 높여주는 것이어야 한다. (그렇지 않으면 팀이 깨어진다)
* 코드리뷰가 잘 되려면
- 너무 많은 절차와 규칙을 만들지 마라. 절차를 아주아주아주 간단하게 하라
- 강요하지 마라. 대신 Encourage 하라
- 모든 코드 commit 을 리뷰하도록 한다거나 하는 형태로 Micro - Manage 를 하지마라
- 개개인의 작업 흐름을 끊지마라
- 코드리뷰를 통해 발견한 것들을 널리 공유하라
- 코드리뷰를 늦게 하는것은 안하는 것보다 나쁠수 있다. Iteration 에 포함시켜라
- 한꺼번에 덜하기보다는 조금씩 자주하라
- 툴에 얽메이지 마라, 중요한것은 개발자들이 서로 대화를 하고 코드를 공유하는 것이다
- 너무 많은 리뷰어를 참여시키지 마라. 2-4 명이 적당하다
* 어떻게 잘 되고 있는지 알수 있는가
- 쉽진 않다, 사실 필요없을 수도/불가능 할수도 있다, metric 에 집착할 필요는 없다.
- 장기간의 이득은 측정할 수 없지만 많다
- Simple Metric 들이면 충분할 수 있다. (리뷰에 사용된 시간, 리뷰 comment 등).
C Runtime Library와 MFC Library의 import 순서가 바뀌어서 강제로 순서를 바꾸어 주어야 한다
프로젝트 속성 -> 링커 -> 입력 -> 특정 기본 라이브러리 무시 :
uafxcwd.lib; libcmtd.lib 입력
프로젝트 속성 -> 링커 -> 입력 -> 추가 종속성 :
uafxcwd.lib; libcmtd.lib 입력
도구 - 옵션 - 키보드 - 다음 추가 키보드 매핑 구성표 적용 - Visual C++ 6
이러면 빌드를 F7을 눌러서 실행할 수 있다
Ctrl + D 찾기 창 메뉴에 보이게 하기
파일에서 찾기 아이콘 옆에 단추 추가/제거 를 눌렀을 때
Ctrl + D 를 단축키로 하는 찾기 창을 추가할 수 있다
* shared_ptr
- 참조 카운팅 방식 스마트 포인터
- 가리키고 있는 객체에 대해 소유권을 가지지 않고 참조 카운트만 유지하는 포인터
- 다른 객체를 가리키면서 포인터에 대한 소유권을 공유
- 자원을 참조하는 외부 객체의 개수를 관리하다가 그 개수가 0이 되면 자동 삭제
- STL 컨테이너 사용 가능
- 가비지 컬렉션의 동작과 유사
- 가비지 컬렉션과 차이는 참조 상태가 고리를 이루는 경우는 없앨 수 있음
(서로 다른 두 객체가 서로를 참조)
* unique_ptr
- 소유권 독점 방식을 사용하는 스마트 포인터
- 복사 생성자와 대입 연산자를 제공하지 않음
- 복사할 수 없으며 소유권 이전을 위해 std::move( ) 이용
- 소유권 해제 시점은 포인터 객체가 가리키는 객체의 소멸, 대입연산, reset 메소드 에서 명시적 호출을 통해 값을 변경할 때
- 스스로 포인터의 유일성을 보장
* weak_ptr
- shared_ptr의 순환 참조로 발생하는 문제를 해결하기 위해 사용하는 특수 포인터
- 레퍼런스 카운트에 포함되지 않고 shared_ptr의 객체만 참조
- 약한 참조 (객체가 살아있도록 유지 않고, 객체가 살아있는 동안만 참조 가능)
- expired 함수를 통해 자신이 참조하는 shared_ptr 상태 확인
- 포인터에 대해 직접 접근 불가능하며, 접근을 원하면 lock( ) 을 통해 shared_ptr로 변환 뒤 shared_ptr의 get( )으로 접근
- 다양한 상황에서 어떤 스마트 포인터를 사용해야 하는지 아래에 설명
* Exception 안전
* 가비지 컬렉션
* 효율성
* STL 컨테이너
* 어디에 사용해야 하는가?
- 지역변수
- std::unique_ptr을 사용해야 한다 (boost::scoped_ptr)
- 클래스 멤버 변수
- copied_ptr
- STL 컨테이너
- 참조 카운팅, 참조 연결이 되는 포인터 ( 가비지 컬렉션이 되는 포인터 )
- 명시적 소유권 이전 : Owned pointer
- 큰 객체 : Copy on write