C++ TIPS

C++ TIPS

'빌드 후 이벤트'로 헤더파일을 복사할 때 읽기 전용으로 복사하기.

라이브러리 프로젝트의 경우 빌드 후 이벤트에 batch 파일을 등록해서 참조용 헤더 파일을 복사하도록 설정하는 경우가 많다. 그런데 문제는, 해당 라이브러리를 쓰도록 설정한 프로젝트에서 값을 변경하다 보면, 실수로 ‘복사된 헤더파일’의 코드를 변경해서 변경사항이 적용되지 않는 불상사가 종종 발생한다. 이 문제를 방지하기 위해서 파일들을 읽기 전용으로 복사하는 편이 좋다. 참고용 코드 :: *.h, 파일 복사(라이브러리 참조용) xcopy /d /s /y /i /r ".\Project\DirectXTex\DirectXTex.h" ".\External\Include\DirectXTex\" ::헤더 파일 읽기 전용으로 변경 attrib +r ".\External\Include\DirectXTex\*.h" xc..

C++ TIPS

Dynamic Link Library 직접 만들고 링크해보기

이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명. 원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것. —이론— 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다. 소스코드 + (라이브러리 헤더 파일) + lib → exe 동적 링크 라이브러리는 컴파일 시 연결된 프로그램에 합쳐지지 않는다.→ dll과 연결된 함수 주소만 프로그램에 합쳐놓고, 자세한 내용은 dll에서 참조해서 사용하는 방식 쉽게 생각해서 주소록만 등록시켜놓고 사용하는 방식이라고 보면 될것 같다. 소스코드 + (라이브러리 헤더 파일) + lib → exe + dll —실전— 1. 라이브러리용 프로젝트 만들기 1. 빈 프로젝트 하나 생성 2. 이렇게 헤더와 소스파일을 각각 하나씩 만들어준다. 3. 동적 링..

C++ TIPS

Static Link Library 직접 만들고 링크해보기

이글에선 초보도 일단 해볼수 있도록 간단한 사용 방법만 설명. 원리는 구글링하면 설명 잘해주는글 수두룩하므로 그걸 볼것. —이론— 정적 링크 라이브러리는 컴파일 시 코드가 연결된 프로그램에 합쳐진다. 소스코드 + (라이브러리 헤더 파일) + lib → exe 동적 링크 라이브러리는 컴파일 시 연결된 프로그램에 합쳐지지 않는다.→ dll과 연결된 함수 주소만 프로그램에 합쳐놓고, 자세한 내용은 dll에서 참조해서 사용하는 방식 쉽게 생각해서 주소록만 등록시켜놓고 사용하는 방식이라고 보면 될것 같다. 소스코드 + (라이브러리 헤더 파일) + lib → exe + dll —실전— 1. 라이브러리용 프로젝트 만들기 1. 빈 프로젝트 하나 생성 2. 이렇게 헤더와 소스파일을 각각 하나씩 만들어준다. 3. 헤더 파..

C++ TIPS

Visual Studio 컴파일 속도 올리기

우리는 이를 여러 개의 헤더 파일과 cpp 파일로 분리하여 클래스 형태로 쪼개서 프로그래밍한다. 순차적 프로그래밍으로 main.cpp에 모든 코드를 떄려박는 것은 가독성이나, 코드 유지보수 면에서 매우 비효율적이기 때문이다. 하지만 이런 식으로 프로그래밍을 할 경우 컴파일 때 문제가 생긴다. 순차적 프로그래밍에서는 이것저것 확인할 필요 없이 코드 순서대로 컴파일을 해나가면 되지만, 객체 지향 프로그래밍에서는 한 클래스에서 이것저것 참조하는 데이터가 생기므로 여기저기 왔다갔다 하면서 컴파일해야 하기 때문이다. 사람의 가독성은 올라갔지만 컴파일 시의 가독성은 떨어졌다고 볼 수 있겠다. 당연히 이건 프로그램이 빌드되는 걸 지루하게 기다리는 나에게만 해당되는 내용이 아니었다. 많은 개발자들이 컴파일 속도를 올리..

C++ TIPS

함수의 const

함수에 포인터 타입으로 인자를 주면 스택에 새 공간을 임시로 할당하여 인자 주소의 값을 복사해온다. -> 이 과정에서 시간이 추가로 소요된다. 하지만 레퍼런스 타입으로 받아오면 이런 과정 없이 참조만 해서 데이터를 활용하므로 시간이 단축된다. 앞에 const를 붙여놓는 이유는 const를 붙이면 인자로 들어온 값을 변경할 수 없게 되므로 실수로 인한 데이터 변조를 막을 수 있다. 함수의 뒤에도 const를 붙일 수 있다. 이럴 경우 함수에서 클래스 내부의 변수를 변경할 수 없게 된다. 또한 const 함수는 같은 const 함수만 호출할 수 있다.

C++ TIPS

서식 지정자 - %[ ] 의 의미

* %[ ] = [ ] 안의 서식만 입력받겠다는 뜻. 다른 서식이 입력되면 더이상 입력을 받지 않는다. ex) %[12345]: 12345만 입력받겠다. %[1-9]: 1~9 사이의 숫자만 입력받겠다. %[abc]: abc만 입력받겠다. %[a-z]: a~z 사이의 알파벳만 입력받겠다. * ^를 사용하여 ^뒤의 문자열을 제외한 나머지만 입력받을 수도 있다. 한마디로 ^ 뒤의 문자가 나오면 입력이 종료된다. ex) %[^,]: ,가 나오면 입력 종료 %[^\n]: 개행이 나오면 입력 종료(개행 빼고 모두 입력받음.) scanf_s("%s", string, 64)에 "동해물과 백두산이"를 입력하면 "동해물과"만 출력된다. scanf_s("%[^\n]", string, 64)에 "동해물과 백두산이"를 입력하면..

C++ TIPS

헤더의 순환참조 막기 - 전방선언

헤더에서 include를 남발하다 보면 서로가 서로를 include하는 순환참조가 발생할 수 있다. classA.h에서는 #include classB classB.h에서는 #include classA 이렇게 되면 컴파일 시 문제가 발생할 수 있다. 하지만 각 클래스 별로 서로의 데이터가 필요한 상황이 있는데, 이 때 순환참조를 방지하는 방법으로 '전방선언'을 활용할 수 있다. 쉽게 생각하면, 'ClassA.h에는 ClassB라는 클래스가 존재한다'만 알려주고, 실제로 ClassB 안의 데이터를 사용하는 ClassA.cpp에서 include를 해 주면 순환 참조를 막을 수 있는 것이다. //ClassA.h //클래스B 전방선언 class ClassB; class ClassA { public: ClassA(..

C++ TIPS

비주얼 스튜디오 팁: 헤더에 선언한 클래스 cpp에서 정의 빠르게 만들기

구현부분을 만들어 줄 함수가 있다면 블록을 걸어준 후에 Ctrl + . -> Shift + C

C++ TIPS

#define을 활용하여 만드는 편리한 매크로들

* 동적할당한 변수를 지워주는 매크로 함수 #define SAFE_DELETE(p) if(p) {delete p; p = nullptr;} * 동적할당한 배열을 지워주는 매크로 함수 #define SAFE_DELETE_ARRAY(p) if(p) { delete[] p; p = nullptr;} * #define을 사용할 때 \를 사용하면 바로 아래줄의 코드를 올려서 붙여주어 한줄로 인식시켜 준다. *** 가장 마지막줄은 \을 빼 주어야 한다. * 이를 이용하여, 싱글턴 패턴 클래스를 편리하게 만들어 주는 define 매크로를 만들 수 있다. *싱글턴 패턴 선언 매크로 #defineDECLARE_SINGLE(Type)\ private:\ static Type*m_Inst;\ public:\ static T..

C++ TIPS

비주얼 스튜디오 팁 모음

여러 줄 주석 처리하기 블록지정 후 Ctrl + K + C 해제는 Ctrl + K + U 컨트롤 + 클릭 하면 단어 지정이 가능하다. 도구-옵션 - 텍스트 편집기 - 일반 - '마우스 클릭을 사용하여 [정의로 이동] 수행' 체크박스 해제 * [정의로 이동] 기능은 이 체크박스를 해제해도 블록지정 후 F12버튼을 누르면 이동이 가능하다. 스크롤바를 지도 모드로 바꾸기 도구 - 옵션 - 모든 언어 -스크롤 막대 - 지도 모드 switch문 자동 완성 시키기 switch를 치고 키보드 Tab 누르기. 그 상태에서 그대로 원하는 enum문의 이름을 적고(혹은 자동완성창에 나오는 이름에 키보드 방향키를 이용하여 커서를 가져다 놓고) Tab + Enter를 누르면 자동완성이 된다. 다차원 배열보다 일차원 배열이 유..

hyrule
'C++ TIPS' 카테고리의 글 목록