본문 바로가기

etc..

Union을 사용하는 경우 예전에 저학년때 union 이라는 요상한놈을 배우고는 이걸 어디써먹지? 그냥 예전에 쓰던 방식이고 이제는 안쓰는 오래된(legacy) 형식인가 싶었다. 요즘 컴파일러를 구현하는데 공간을 효율적으로 쓰기위해 떠올려보니 요 놈이 있었다. 예를들어 함수의 파라미터로 넘어오는 인자의 형이 int, double, char 중에 한 놈이라고 가정한다면, 컴파일러를 만드는 과정에서 이를 저장하는 심볼테이블을 짜야되는데 입력으로 셋 중 어느 형이 들어올지를 모르니 구현하는 입장에서 세가지 경우를 다 상정하고 int, double, char 형 저장공간을 다 마련하는 수 밖에 없다. struct sym_table{ int iValue; double dValue; char cValue; };//9바이트 하지만 union을.. 더보기
c와 cpp 파일을 같이 컴파일할 때 c와 cpp는 당연히 내부 함수 호출 방식 등 여러가지가 다르므로 컴파일시 같이 컴파일 하기 위해서는 컴파일러에게 이건 c코드다. 이건 cpp코드다 알려줘야 컴파일러가 알아먹고 링킹시에 적절한 라이브러리와 링크를 한다. 어떻게 알려주느냐? extern "C" 를 cpp 코드에 써주면 컴파일 시에 컴파일러가 알아서 c코드에서 해당 라이브러리를 가져와서 링킹한다. 검색해보니 ---------------------------------------------------------- 헤더파일에 프로토타입을 쓸때 다음과 같이 쓰면 된다. extern "C" int printf.... extern "C" int sprintf.... extern "C" int vprintf.... extern "C" int fprin.. 더보기
GRE 공부 시작 짐 정리하다 이때까지 본 영어책이 얼마나 되나 싶어서 쌓아봤다. 사실 대여섯권쯤 더있지 싶은데, 좀 있다 도착할 GRE책 서너권까지하면 책 값만 해도 상당하다. 영어공부의 필요성을 느껴서 군대에서 그러니까 2006년에 처음 시작했는데 군대에서 토익 치고, 학기 중 방학마다 두달씩 토플 공부하고 이제 드디어 GRE 까지 왔다.; 사실 토익, 토플은 학원 안다녀도 혼자 인터넷에서 방법 찾아보고 공부 할 수 있는 수준이다 싶은데 요즘 학생들은 너무 학원에 의존하는 경향이 있다. 내 생각엔 처음 한,두달 정도 학원다니면서 이런 시험이다- 감 정도 잡고, 혼자하는게 훨씬 효율적이다.(의지가 안된다면, 학원을 가야겠지만, 의지가 안된다면 애초에 고득점을 받기는 글렀다) 역시 늘 하던 방법인 단어책 부터 몇 권 다외.. 더보기
ACM 2011 대전 본선 출전 ACM 은 쉽게 말해서 알고리즘 대회인데, 작년에 잠깐 준비해서 참가했었는데 경험부족인지 실력부족인지, 둘다겠지만 본선에 진출하지 못했다. 올해는 아무 준비 없이 애들이랑 추억삼아 나갔는데 덜컥 학교대표로 본선에 진출하게 되었다. 근데 또 본선에 진출하게 되자 욕심이 생겨서, 그래도 학교이름도 전광판에 뜰텐데 학교망신은 시키면 안되겠다 싶어서 애들이랑 같이 남은 2주간 부랴부랴 준비하기로 했다. 지난 5년간의 기출문제를 유심히 분석해보니, 평균적으로 난이도 상 중 하 로 나누었을때 하(3~4) 중(3~4) 상(2~) 정도로 나뉘어져 있었고, 2주간 빡세게 준비를 한다면 하는 충분히 다 풀고, 중 2문제 정도 더 풀어서 4~6문제 정도는 충분히 풀 수 있다는 확신이 섰다. 왜냐하면 실력도 실력이지만 토익,.. 더보기
다이얼로그의 포인터 얻어오기 다이얼로그 기반의 프로젝트로 작업을 하다보면 사용자가 임의로 여러가지 클래스들을 만들어 사용하는 경우가 있다. 제너릭으로 만들든 CView, CFormView등의 MFC에 정의되있는 클래스의 상속을 받아서 만들든 다양한 형태의 클래스가 만들어 질 것이다. 보통 사용자가 만든 클래스들은 메인 다이얼로그 클래스에 헤더파일을 인클루드하고 인스턴스로 만들어져 사용이 될텐데 경우에 따라 사용자가 만든 클래스에서 메인 다이얼로그의 변수나 함수들을 사용해야 할 경우가 생기게 된다. 이런 경우 메인 다이얼로그의 포인터를 얻는 방법에는 다음의 두 가지가 있다. 메인 다이얼로그 클래스 : CMainDlg 임의로 생성된 클래스 : CChild 라고 했을 때, 1. CMainDlg.h를 인클루드하고 다음과 같이 멤버변수로 등.. 더보기
쓰레드에서 dialog 의 updatedata()쓰는법 다이얼로그 사용시 프로그램을 실행하면 프로그램이 돌아가는 동안 다이얼로그가 먹통이 됩니다. 이를 해결하기 위해 쓰레드를 사용하게되는데 이때 쓰레드 안에서 바로 UpdateData함수를 사용하면 에러가 발생합니다. 이를 해결하기 위해 윈도우 메세지로 보내서 먹통이 되지 않고 다이얼로그에 변경값을 실시간으로 변경이가능하게 할 수 있습니다. -- 소스 -- header 부분에 추가 #define THREAD_UPDATE ( WM_USER +1 ) //메세지 값으로 WM_USER +1 이값이 아니어도 상관은 없습니다. *Thread가 돌아가며 사용하는 UpdateData함수의 모든 Dlg 클래스에 추가해야 한다. 해당 Dlg의 h부분에 추가 class ThreadDlg { ... afx_msg LRESULT O.. 더보기
프로그래밍 습관 물론 많이 찾아보고 많은 라이브러리를 들고있고 알고리즘적 사고를 할수있고 여러가지 문제 해결능력이 뛰어난것도 코딩을 잘할 수 있는 습관이겠지만 디버깅을 잘하는게 지금 내 수준에서는 제일 중요하다고 본다. 문제가 발생했을때. 프로그램이 안돌아갈때 왜 안되는지를 잘 찾아내고 여러가지 가설을 세우고 디버깅 환경을 잘 구축을 해서 이러한것들을 잘 이용해서 문제를 해결하는 능력이 구현능력 못지 않게 코딩을 잘할 수 있는 습관 이라고 본다. 그리고 코딩 외적인 것에도 코드에 주석 처리라던지 코드수정 후 날짜, 시간 표기라던지 코드의 주기적 백업등 코드 외적인것에서 사소한 습관이 효율적인 프로그래밍을 만드는것 같다. 오늘 같은 경우도 어제 다섯시간 동안 못잡은 버그를 민조햄이 1시간만에 잡아냈다. 네트워크 화상 채팅.. 더보기
컴파일시 실행코드 사이즈 줄이는법 생각지도 못한방법들이 많다 컴파일 옵션 조정은 물론이고 pe파일포맷을 이용 섹션들을 통합하는방법, 엔트리 포인트를 강제 지정하는 방법, 등등 http://www.catch22.net/tuts/minexe http://blog.naver.com/underhack?Redirect=Log&logNo=20003615522 더보기
ESQL 기본개념 http://blog.naver.com/jtytop?Redirect=Log&logNo=40018218614 더보기
[MFC]쓰레드와 세마포어, 뮤텍스를 이용한 생산자-소비자 문제 유닉스랑 리눅스의 pthread만 쓰다가 과제가 나왔길래 리눅스로 할래 MFC로 할래 하길래 이번 기회에 MFC 쓰레드도 공부할겸 MFC로 하기로 했다. MFC 쓰레드를 이용하는 것이 처음이라서 먼저 서너시간쯤 MFC쓰레드에 관해 살펴보다가 짰다. 처음에 win 32api쓰레드와 MFC 쓰레드가 헷갈려서 찾아보다가 결론은 두 개는 거의 비슷하고 MFC 쓰레드는 win32 api 쓰레드를 wrapping 한 것이라고 S모씨가 알려주었다. 아 다만 쓰레드 생성 함수가 약간 다르다. MFC는 쓰레드가 Worker 쓰레드와 user interface 쓰레드로 나뉘고 각각의 쓰임새가 있다. 처음에 뭘 쓸까, 무슨 차이일까 고민하다가 찾아보니 UI Thread는 사용자 메시지 루프를 가지고 있는(즉 어떤 메시지가 .. 더보기