말씀하신 것 중에 for 문내에서의 변수의 예는, VC가 표준 C++을 지키지 않은 예로 유명한 것입니다.
벌써 여러해 동안 지적되어온 꽤 오래된 문제인데 아직도 해결이 안되었군요.
컴파일러 설계단계에서 변수의 스코프를 잘못 설계했기 때문에 그런 문제가 발생한 것으로 압니다.
그럼...
I.MagicPotato 님이 쓰신 글 :
: (제가 다른데 썼던걸 고대로 옮깁니다)
:
:
: 지금 작업중인 서버를 어느정도 짜고..클라이언트에 붙여봤는데..
:
:
: 참 그전에 이런일이 있었죠..
: 3D엔진은 VC++로 작업, 클라이언트에 붙는 네트웍 인터페이스는 BCB로 작업
:
: LIB나 DLL로 하려니 뭔가 변환을 해야하는지-_-기술이 부족 =_=
: (화이트페이지에 방법을 알지만-_-복잡하고 귀찮다는거 아실껍니다)
: 그래서 소스로 껴서 함께 컴파일을 하려는데..
:
: 다음과 같은 문제로 불가능
:
:
: 첫번째.. for(int i ...) / for(int i ...) 를
: VC++은 for(int i ... ) / for( ... )
:
: 이런식으로 해야했고 -_- (이건 알고 있던건데-_-왜이런 실수를 했는지;;)
:
:
: 두번째.. (void *)pPack = vpCasting; // 기억이 안나지만 이런식.
: 좌측 캐스팅은 VC++에서 안먹더군요 -_-
:
: 즉.. pPack = (char *)vpCasting; 으로 해야 했습니다.
: (char *)문제가 아니라-_- 저 (char *)보다 훨씬 긴 구조체 였기 때문이죠..
: (코딩을 짧게 짜기 위한-_-)
:
:
: 세번째.. std::bad_alloc 또는 xalloc
: VC++은 저게 없더군요-_-덕분에 <iostream> 아예 날리고.. if(pDest) 로 검사
: (ANSI C++을 지키지 않았다는 소리-_-)
:
:
: -_-조금 귀찮았지만 어떻게 어떻게 고쳐서 컴파일이 되었고.
:
:
: 서버를 붙여봤습니다. (서버는 BCB로 제작)
: 그런데 치명적인 문제 발생-_-
:
: -_-VC++에 비트필드/pack기능이 약하더군요
:
:
: #pragma pack(1)
: struct {
: int i:1;
: }
: #pragma pack()
:
: VC++은 저 구조체가 4바이트, BCB는 1바이트......
: 100개가 넘는-_-패킷 구조체를 몽땅 뜯어고쳐야 했습니다 ;
:
:
: 근데 귀찮아서-_-서버를 그냥 VC++로 컴파일 -_-;
: (세번째 bad_alloc 문제만 해결하니 바로 되었네요)
:
:
: 문제는.. 쓸떼없는 패킷까지 전송하게 만드는 VC++....
: 클라이언트분도 문제를 아시고 급한불 끄면 BCB로 컨버팅 해야 한답니다.
: (CPU명령 생성 문제나 MMX명령 컴파일 문제도 있고 하고..)
:
:
: 빌더가 다시한번 좋다고 느껴지는 한편..
: 왜 많은 개발자가 빌더를 쓰고싶어도 못쓰는지-_-
:
: 위와 같은 문제는 단순한 문제고.
: 좀더 복잡한 프로젝트를 할 경우 어떤 문제가 생기는지도 모르겠네요
:
: 저같은 입장으로썬 볼랜드의 웹진영이나 크로스플랫폼-_-전략..
: 이런거 다 필요없고
:
: VC++과의 호환에 맞춰주면 좋으련만.
:
:
:
: 덧글
:
: 글을 쓰고나니-_-VC++형식으로 컴파일 되게 해달라 라고 쓴거 같은데-_-
: 그렇게 되면 빌더 안쓰죠 =_=
:
: 최소한 LIB/DLL만이라도 VC++에서 바로 사용가능하게 뽑아낼수 있으면 좋을텐데..
: 문제 1,2,3은 프로그램 성능같은데 큰 문제를 불러오진 않지만..
:
: 1바이트가 아까운 네트웍에서 4번째와 같은 문제는 안되죠..
: 모두 VC++컴파일러가 앞서지 못한 문제지만-_-
:
: 볼랜드에서 쫌만 신경쓰면 가능할텐데 -_-
: 많이 아쉬운 부분이 요즘 또 보이는군요.
:
:
: 덧글2
:
: 닷넷을 지원한다고 했는데
: 빌더로 닷넷환경에서 개발할수 있다는건지.
: 빌더로 VS.NET 개발툴을 쓰는 프로그래머와 함께 근접적인 개발이 가능한건지 모르겠네요.
: (아마 전자겠죠? =_=)
:
|