이전 글에서 계속됨
5. 완성 그리고, 남은 이야기들
a. 주요 마일스톤
- 2차 도전 시작: 2012. 4. 5
- 변환 완료: 2012. 6. 16
- 디버깅 완료 후 원작자 통보: 2012. 6. 19
https://twitter.com/chikuyonok/status/214984195234213890
- Notepad2-mod 적용 완료: 2012. 6. 20
b. 누락된 약어
젠코딩에서 사용할 수 있는 약어는 구글 코드에서 확인할 수 있다.
그런데, css 쪽을 보다보니 구현되지 않은 코드가 하나 눈에 띄었다.
exp가 css의 snippet(약어) 테이블에 포함되지 않은 것이다.
그래서 내 마음대로 추가시켰다.
c. js의 구조는 은근히 파스칼을 연상시킴
예전에 파스칼을 한창 사용할 때는 함수 내에 다시 함수를 구현하는 구조를 무척 좋아했다.
무엇보다도 함수의 적용범위(scope)가 명확하다는 장점 때문이었다.
그러다가 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