- window에서 하위 폴더까지 파일 목록 가져오기
#include "stdafx.h"
#include "windows.h"
#include "winbase.h"
#include "stdio.h"
#include "cstringt.h"
#include "atlstr.h"
bool FindnFile( const wstring strPath )
{
bool bContinue = true;
WIN32_FIND_DATAW FindFileData;
HANDLE hFind;
wstring strFindPath, strFileName;
wstring FullPathName;
strFindPath.assign(strPath+L"\\*.*");
hFind = FindFirstFileW( strFindPath.c_str(), &FindFileData );
//wprintf(strFindPath.c_str());
//printf("\n");
if( hFind == INVALID_HANDLE_VALUE ){
//printf ("FindFirstFile failed (%d)\n", GetLastError());
return false;
}
while( bContinue )
{
strFileName.assign(FindFileData.cFileName);
if( ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) == FILE_ATTRIBUTE_DIRECTORY )
{
if( strFileName.compare(L".") !=0 && strFileName.compare(L"..") != 0 )
{
strFindPath.assign(strPath+L"\\"+strFileName);
FindnFile( strFindPath );
}
}
else {
FullPathName.assign(strPath+strFileName);
wprintf(FullPathName.c_str());
printf("\n");
}
if( FindNextFileW( hFind,&FindFileData ) == FALSE )
bContinue=false;
}
FindClose( hFind );
return true;
}
- non blockingsystem call : non blocking으로 프로세스 실행시키기
윈도우 : system("START /B 이름");
리눅스 : system("이름 &");
- 다른 헤더파일에 선언된 전역변수를 가져와서 쓰려면, #include 대신, extern 변수명 을 해주어야한다.
- stdafx.h 파일 내용을 바꾸면 생각지도못한 링크 및 컴파일 에러가 난다.
- C++에서의 싱글톤(Singleton) 디자인 패턴
http://vallista.tistory.com/48
- friend 선언
전역 함수나 클래스에서 어떤 클래스의 private 멤버 변수에 접근해야할 수 있게 해주는 기능.
캡슐화에는 벗어나지만, 특정 라이브러리(ex) SDL 라이브러리)가 전역 함수를 반드시 써야만 사용가능한 경우 등에서 유용하다.
http://warmz.tistory.com/890
- 함수 포인터와 멤버 함수 포인터
일반 전역 함수의 포인터와 클래스의 멤버 함수 포인터는 시그니쳐(형식)이 다르다.
따라서 일반 전역 함수를 받는 함수 포인터에는 멤버 함수 포인터를 전달할 수 없다.
http://www.gpgstudy.com/forum/viewtopic.php?p=115092
http://ncanis.tistory.com/319
http://blog.eairship.kr/m/post/255
- 순환 참조 문제
교차 참조, 순환 참조가 문제를 일으키는 이유 : 컴파일러가 두 파일에서 헤더파일을 복사해 올 때, 서로가 서로의 헤더를 포함시켜 무한루프가 발생한다. 이때 #pragma once 같은 키워드를 사용할 경우, 두 번째 복사 시도시 아이에 헤더를 가져오지를 않아 한쪽 파일에서는 헤더가 아이에 읽히지 않게되고, 따라서 크 파일은 컴파일 에러가 발생한다.
http://ekessy.tistory.com/20
즉 순환 참조란 중복 참조와는 다르게 A, B 두 클래스에서 서로의 헤더파일을 include 하는 경우이다. 이 경우 메크로를 이용해 중복 헤더 파일을 막더라도 위와같은 문제로 해결 할 수 없다.
이런 순환 참조(Circular dependency)가 발생하였을 때의 문제는 전체 아키텍쳐의 설계가 잘못 되었기 때문이다.
이를 해결하는 방법으로 제일 좋은 것은 순환 참조가 일어나지 않게 다시 설계하는 것이다.
https://kldp.org/node/59903
http://stackoverflow.com/questions/4734998/circular-dependency-best-practice/4735091#4735091
설계 방법으로는 대표적으로 부모 클래스를 이용하여 상호 참조가 일어나는 부분을 두 클래스에게 상속해주는 방식이 있다.
그다음으로는 전방 클래스 선언이 있다. 이 경우는 설계를 바꾸지 않아도 되는 편리함은 있지만, 역시 문제를 완전히 해결하는 것은 아니다.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=279285&ref=279276
http://parkjunehyun.tistory.com/entry/%ED%81%B4%EB%A0%88%EC%8A%A4-%EC%A0%84%EB%B0%A9-%EC%84%A0%EC%96%B8Forward-declarations%EC%99%80-%EC%83%81%ED%98%B8-%EC%B0%B8%EC%A1%B0-%ED%97%A4%EB%8D%94-%ED%8C%8C%EC%9D%BC-%EC%B6%9C%EC%B2%98-%ED%81%B4%EB%A0%88%EC%8A%A4-%EC%A0%84%EB%B0%A9-%EC%84%A0%EC%96%B8Forward-declarations%EC%99%80-%EC%83%81%ED%98%B8-%EC%B0%B8%EC%A1%B0-%ED%97%A4%EB%8D%94-%ED%8C%8C%EC%9D%BC%EC%9E%91%EC%84%B1%EC%9E%90-%EC%B0%AC%EB%9E%80%ED%95%9C%EB%B9%9B
- stdafx
이 파일은 Visual Studio에서 precompile 이라는 기능을 키면 필요한 파일이다.
간단히 말해 빠른 컴파일을 위해, 수정되지 않은 cpp파일은 다시 컴파일 하지 않고 건너 뛴다는 것이다.
이 경우 반드시 모든 cpp파일 위에 #include "stdafx.h" 를 참조해주어야 에러가 나지 않는다.
http://soyoja.com/372
- #pragma once
모든 헤더파일 위에 위 선언을 해주자.
#ifndef / #endif 보다 더 빠른 컴파일 속도를 보이며 기능적으로 아무런 문제가 없다.
http://oojjrs.tistory.com/32
- 클래스 static 멤버 변수 초기화
클래스 내에 static 멤버 변수를 선언한 경우, 반드시 class내부가 아닌 외부에서 초기화를 해주어야한다.
ex) player_video_component main_controller::pvc = player_video_component();
http://pacs.tistory.com/entry/C-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-static
'Development > Free Topic' 카테고리의 다른 글
추천하는 소프트웨어 스택 (0) | 2015.03.03 |
---|---|
C++ STL의 Vector 사용법 (0) | 2014.12.04 |
Visual Studio (0) | 2014.11.24 |
안드로이드 Thread 사용하기 (0) | 2014.10.05 |
RESTFUL API (0) | 2014.07.22 |
댓글