Microsoft vs Standard

[[User:Bluegol|Bluegol]] ([[User talk:Bluegol|talk]]) 00:58, 13 January 2013 (KST)

== MS 확장 중 사용할 것 ==

  • override
  • local struct/class를 펑터로 사용하기
  • warning 무시 예.
    ** #pragma warning( push )
    ** #pragma warning( disable : 4996 )
    ** #include <boost/iostreams/device/file.hpp>
    ** #pragma warning( pop )
  • VS 2008 SP1의 std::tr1 녀석들…
  • stdafx.h
    ** 잘 사용하면 컴파일 시간이 화악~ 준다.
  • 타입 관련
    ** DWORD, BYTE, …등은 win api 때문에 사용할 수 밖에~ 그러나 win api와 관련 없는 부분에는 되도록 피할 것
    ** int8_t, int_16t, …
    *** vs2010에는 있다.
    *** 없으면 정의해서 쓰자. ms specific은 __int8, etc.
    ** char* vs void* : 버퍼는 당연히 char로 써야 한다. void는 오로지 아규먼트 패싱용
  • _countof 마크로: 어레이의 사이즈 리턴. MS 확장인듯 한데 편함. stdlib.h

==스탠다드 라이브러리 (or lack thereof)==

  • wchar_t의 에 해당하는 펑션들
  • “secure” 펑션들. (memcpy_s, etc.)
    ** MS: std::copy 쓰면 지. 이걸 어쩔?
  • assert
    ** 스탠다드와 MS
    *** Standard와 MS 모두 NDEBUG를 디파인하면 동작 안 하도록 되어 있다.
    *** cf. The assert routine is available in both the release and debug versions of the C run-time libraries. Two other assertion macros, [http://msdn.microsoft.com/en-us/library/ezb1wyez(v=vs.71).aspx _ASSERT] and [http://msdn.microsoft.com/en-us/library/ezb1wyez(v=vs.71).aspx _ASSERTE], are also available, but they only evaluate the expressions passed to them when the [http://msdn.microsoft.com/en-us/library/0b98s6w8(v=vs.71).aspx _DEBUG] flag has been defined.
    *** cf. MS [http://msdn.microsoft.com/en-us/library/8hyw4sy7(v=vs.80).aspx _CrtDbgReportW] 버그…랄까 feature랄까. %만 찍으려 하면 죽는다!
    **** 예. _ASSERTE( a % 3 == 0 );
    ** desideratum
    *** 메시지를 같이
    **** 그냥 스탠다드 assert로 쓰고, “&& message” 형태로 쓴다? 메시지 만들기 좀 귀찮다!
    **** 메시지 등을 인자로 받으면 스탠다드와 충돌!
    **** 무엇이 좋을까 선택의 문제…
    *** 로그도 찍히게
    *** 메시지 박스/로그 각각을 선택 가능하게

==마크로들==

  • min, max가 std::min, std::max를 방해한다! undef 해 버리자!
  • 기타 ~”A”로 가는 것들 걸리적 거리면 undef!

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.