TEUS.me

 
 

이전 글에서 계속됨



5. 완성 그리고, 남은 이야기들


a. 주요 마일스톤


- 2차 도전 시작: 2012. 4. 5

- 변환 완료: 2012. 6. 16

- 디버깅 완료 후 원작자 통보[각주:1]: 2012. 6. 19


https://twitter.com/chikuyonok/status/214984195234213890


- Notepad2-mod 적용 완료: 2012. 6. 20



b. 누락된 약어


젠코딩에서 사용할 수 있는 약어는 구글 코드에서 확인할 수 있다.

그런데, css 쪽을 보다보니 구현되지 않은 코드가 하나 눈에 띄었다.



exp가 css의 snippet(약어) 테이블에 포함되지 않은 것이다.

그래서 내 마음대로 추가시켰다.



c. js의 구조는 은근히 파스칼을 연상시킴


예전에 파스칼을 한창 사용할 때는 함수 내에 다시 함수를 구현하는 구조를 무척 좋아했다.

무엇보다도 함수의 적용범위(scope)가 명확하다는 장점 때문이었다[각주:2].


그러다가 C++로 넘어가보니, 함수 내에 함수가 들어가는 구조를 사용할 수 없었다.

네임스페이스를 사용할 수도 있긴 했지만, 본질적으론 완전히 다른 얘기였다.


그런데, js는 이런 구조에 있어서는 파스칼에 더 가까운 구성을 갖고 있다.


그리고, 이 구조를 C++로 옮기는 것이 쉽지 않았다.



d. WDK 문제


WDK는 wchar_t 형을 완벽하게 지원하지 못하며, intrinsic 형으로 컴파일하면 종종 오류를 일으킨다.

따라서 컴파일 시 다음 옵션을 붙여 intrinsic 형으로 컴파일하지 않도록 해야 한다.


/Zc:wchar_t-


관련글: stackoverflow: Is wchar_t Supported in C++ WDK STL?



e. wstring 삽질


wstring을 다루면서 한 가지 간과한 것이 wchar_t*나 CString과 다른 점이 있다는 것이다.

다름 아니라 wstring은 vector 기반으로 문자열 끝이 NULL로 끝나지 않는다는 것이다.


따라서 아래와 같은 코드를 쓰면 그냥 뻗어버린다.


wstring str=L"Hello";

int i=0;

while (str[i]) {

  if (str[i++]==L'1') return true;

}


아무 생각 없이 이런 식으로 작성했다가 막판에 몽땅 뜯어고치는 대참사 발생…

게다가 그런 부분은 대부분 정규식을 함수로 변환한 곳이라 눈 빠지는 줄 알았다. >.<



f. toupper/tolower


wstring은 C의 wcsupr()/wcslwr()에 해당하는 기능을 사용하려면 아래와 같이 transform()을 사용하면 된다.


transform(str.begin(), str.end(), str.begin(), tolower);


그런데, transform()은 WDK에선 컴파일이 되지 않는다.

MS가 하는 짓은 다 그렇다.


그래서, 일일이 다시 짰다. OTL



g. stoi


문자열을 숫자로 변환해주는, C의 atoi()에 해당하는 C++/wstring의 함수가 stoi()이다.

하지만, 우리의 WDK는 이런 함수 잘 모른다.


그래서, 이것도 일일이 다시 짰다. OTL


  1. Sergey 씨는 스파이더 몽키 등의 JS-C++ 브릿지를 사용하기를 권장했으나, 메모장2의 특성상 native가 더 낫다고 봄 [본문으로]
  2. 물론, 그로 인해 들여쓰기가 복잡해진다는 문제 등도 있다. 게다가 깔끔한 { }가 아닌 begin end 라니… [본문으로]

공유하기

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

  1. qp
    흠..
    다음부터 이런 포스팅은 영어로 써주세요. (다른 외국어도 OK)
    그래야 조사 외에 아무 것도 못 알아먹더라도 자괴감은 들지 않으니까요. ㅋㅋㅋㅋㅋㅋㅋ
    2012.06.25 22:15