이전 글에서 계속됨



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 라니… [본문으로]
신고
  1. qp 2012.06.25 22:15 신고

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

+ Recent posts