일하다가 놀라운 사실을 하나 알게 되었다.
(마이크로소프트의 일이라 놀랍지 않을수도 있다.-.-;; )
Microsoft Visual C++ (적어도 2005 .NET버젼까지)는
C++표준인 export 키워드를 지원하지 않는다!!!!!!!!!!!
이런 어처구니 없는...
예전에는 이런 일도 있었다.
CImage<float> img;
img.Load("inputImage.xxx");
const float fr = 16.0;
const int iPixelSize
= img.getPixelSize(); // This is 200.
int r1 = (int) (fr * 1000.0 / img.getPixelSize()); // This gives r1=80.
int r2 = (int) (fr * 1000.0 / iPixelSize); // This gives r2=79.
img.Load("inputImage.xxx");
const float fr = 16.0;
int r1 = (int) (fr * 1000.0 / img.getPixelSize()); // This gives r1=80.
int r2 = (int) (fr * 1000.0 / iPixelSize); // This gives r2=79.
이런 황당한 경우를 당하면 정말 일할 맘이 싹 사라진다.
우리가 마소를 자주 비웃어주긴 하지만,
사실 마소에는 대단히 똑똑한 사람들이 정말 많고 보통 프로그래머들도 꽤 괜챦은 수준이고,
소프트웨어 엔지니어링이나 코드 관리의 측면에서도 정말 노력을 많이 하는 것 같은데,
이런 일들이 벌어지는 걸 보면 개인들의 똑똑함의 합이 집단의 똑똑함이 되지 못하거나
소프트웨어 엔지니어링이라는 게 보통 어려운 일이 아닌 것이다.
아... 일하기 싫다...
'반컴소년' 카테고리의 다른 글
| 6년만에 내 컴퓨터를 갖다. (7) | 2009/09/07 |
|---|---|
| 이메일은 외국 계정을 이용하라는 떡검님의 말씀!!! (12) | 2009/04/23 |
| 구글의 잔대가리 굴리기 (6) | 2009/04/09 |
| 구글이 쥐박이 가카께 무릎꿇었군. (2) | 2009/03/31 |
| 독감 예방에도 관심을 갖는 구글 (0) | 2009/02/26 |
| 미투데이 탈퇴하다 (4) | 2008/12/22 |
| 관리자 승인이 필요한 댓글? (0) | 2008/10/25 |
| 으헉~~. 마이크로소프트 비쥬얼C++. (18) | 2008/03/26 |
| "24" 1994년 버젼 (세상 참 많이 변했다.) (4) | 2007/11/10 |
| How to use RealVNC free edition in Vista (1) | 2007/10/13 |
| 윈도우 탐색기에서 Raw 이미지 파일 보기 (0) | 2007/02/27 |
이올린에 북마크하기
이올린에 추천하기
댓글을 달아 주세요
정말 황당한 버그이군요-_-;
2008/03/26 21:38 [ ADDR : EDIT/ DEL : REPLY ]저번에 엑셀 2007버전에서도 저런거랑 비스무리한 버그가 있었다고 합니다.
ps. 그런데 export는 뭔가 처음 들어보는 키워드군요. 어떤때 주로 사용하나요?
export는 템플릿을 쓸 때 쓰는 키워드인데요, 템플릿의 선언과 정의를 따로 둘 때 쓰이는 것이 원래 의도라 하더군요. 예를 들어 템플릿 선언을 h파일에 선언해 두고 정의는 cpp파일에 두려 할 때처럼 말이죠.
2008/03/27 01:47 [ ADDR : EDIT/ DEL ]그런데... 좀 더 알아보니 export는 MS뿐만 아니라 GCC등 여러 다른 컴파일러에서도 지원을 안 한다 하네요. 표준안 보다가 좋은 것 발견했다 싶었는데 비쥬얼씨플플에서 안 되길래 괜히 한 번 거품 물었다는... ㅋㅋㅋ
C에 비해서 C++는 저처럼 단순무식한 프로그래머에게는 너무 키워드도 많고 어려운 것 같아요. -.-;;
비밀댓글 입니다
2008/03/26 21:47 [ ADDR : EDIT/ DEL : REPLY ]저게 정말 컴파일러 버그인지, 아니면 제 버그인지 확신은 없죠. ^^ 프로그래밍의 도를 깨우치는 것은 너무나도 어려운 길이라...
2008/03/27 01:43 [ ADDR : EDIT/ DEL ]export라는 키워드가 컴파일러 전체를 다시 만들어야 될 정도로 큰 일이라서
2008/03/28 08:23 [ ADDR : EDIT/ DEL : REPLY ]대부분 지원 안하는 거라고 얼핏 들었습니다. 게다가 VC에서 export라고 따로
적어주지 않아도 template구현 부분을 cpp에서 작성해도 잘 컴파일 되죠.
아직 많은 컴파일러가 cpp에서 template구현을 지원하지 않고, 이 문제 때문에
명시적으로 써주기 위해서 export라는 키워드가 나온걸로 알고 있습니다.
제가 잘못 알고 있거나 다른 정보 있으면 알려주세요~
네. 대부분 지원 안 하는 것 같더라구요.
2008/04/01 16:18 [ ADDR : EDIT/ DEL ]그런데, VC에서 template 구현을 cpp에 작성해 두면, 그 함수를 어디선가에서 콜 하지 않은 경우에는 링크 에러가 생기지 않나요? 템플릿이 instantiation이 되지 않아서 템플릿 함수가 obj파일 안에 안 생겨서 심볼을 못 찾겠다는 링크 에러가 생기는 것 같던데요. 그래서, 저는 일종의 임시방편으로 cpp파일 안에 일종의 dummy함수를 만들어서 모든 패러미터 조합을 다 사용해서 템플릿 함수를 한 번씩 사용해 주는 편법을 쓰고 있는데요. -.-;; 뭔가 더 멋진 방법이 있으면 좀 가르침을 주세요.
저...-ㅅ- 저런거 몰라요..-ㅅ- 문과생임..ㅋㅋㅋㅋㅋㅋ
2008/04/03 23:50 [ ADDR : EDIT/ DEL : REPLY ]이과생도 모르구요, 전자공학 전공이어도 모르는 사람이 태반이 넘어요. 저도 여태 모르다가 이제서야 알았어요. ㅋㅋ
2008/04/04 23:09 [ ADDR : EDIT/ DEL ]옜날에 무슨 바람이 불어서인지 잠간 배워볼라고 6개월 학원댕기고그랬죠....알고보니 이건 학교 댕기면서 묻어가야 하는것 같더라고요..-ㅅ-
2008/04/05 13:39 [ ADDR : EDIT/ DEL : REPLY ]6개월간..???? <--- 그리고 돈 좀 날려주시고..집에 왔어요..-_-
6개월이나요? 아주 심각하게 배우려 하신 거군요! 흠흠흠... ^^
2008/04/06 22:49 [ ADDR : EDIT/ DEL ]사실 export 키워드는 visual c++ 뿐만이 아니라 이걸 공식적으로 지원하는 컴파일러는 Comeau컴파일러 하나뿐이라고합니다.(exeptional c++ style - Herb sutter.2005) 관심있으시면 이 책을 읽어보시는것도 좋을듯 하네요~ 무려 두챕터에 걸쳐서 export에 대해 설명하고 있습니다~^^
2008/05/08 23:25 [ ADDR : EDIT/ DEL : REPLY ]네. 저 위에 댓글에 나중에 적었듯이 대체로 지원안한다 하더군요.
2008/05/09 11:11 [ ADDR : EDIT/ DEL ]책 추천 감사합니다. 프로그래밍 잘 하시나 봐요. 저는 프로그래밍을 워낙 싫어해서... ^^
저 아는 사람 이야기인데요.
2008/12/22 05:56 [ ADDR : EDIT/ DEL : REPLY ]하위버전에서 만든 코드를 불러들였더니
*를 날려버리더라는 어처구니없는 일도 있었데요.
뜨와띠엔 댁에서 담넘어 왔다가 글이 잼있어서 흔적 남기고 사라집니다. ^^;
그래서 이 카테고리 이름이 "반컴소년"인 겁니다. ㅎㅎ
2008/12/22 19:55 [ ADDR : EDIT/ DEL ]컴파일러 버그가 아니라 부동소수점 오차 때문에 생긴 문제 같네요.
2009/10/30 13:22 [ ADDR : EDIT/ DEL : REPLY ]강제 형변환에 너무 관대하신 것 같은데, 저런 식의 코드에는 자연스럽게 거부감이 드셔야 하는 것이 좋을 것 같습니다.
네. 저도 그렇게 짐작하고 있습니다. 그것 말고는 별다른 이유를 찾기 어렵죠.
2009/10/30 18:24 [ ADDR : EDIT/ DEL ]다만 짜증나는 것은 img.getPixelSize()은 { return size; } 이고 size는 iPixelSize과 마찬가지로 int형 200 이었거든요. (const는 아닙니다. 이게 차이를 만드는지 어쩌는지는 잘 모르겠지만.) 같은 형의 변수로 대입을 한 번 한 것을 가지고 한 연산과 바로 한 연산의 결과가 다르게 나온다는 게 참 짜증이더군요. 만일 부동소숫점 문제라면 왜 부동소숫점 연산이 다르게 되는지도 미스테리구요.
강제 형변환을 안 하면 좋겠지만, 저 경우에는 어떻게 해야 그걸 피할 수 있는지 아이디어가 없습니다. 한 수 가르침을 주시면 감사.
완전한 소스가 없기 때문에 뭐라고 확신할 수는 없지만
2009/11/10 17:31 [ ADDR : EDIT/ DEL : REPLY ]높은 확률로 부동소수점 최적화 문제같군요.
C에서 변수에 담은 값과 리턴된 값이 항상 같은 종류의 값이라고 할 수는 없습니다...
자세한 사항은 아래링크를 참고하시고
이런 문제는 표준의 문제지 MS의 똑똑함을 의심할 문제는 아닙니다.
덧붙여 C와 특히 C++에는 비슷하거나 더한 상식밖 문제들이 산적해 있어
어셈분석을 익히던가 그냥 감을 잡던가 해야 한다죠...
http://kldp.org/node/105975
템플릿은 저도 더미를 만든적이 있어서 하는 말이지만
그렇게 쓰라고 만든 템플릿이 아니라고 하더군요 ㅎㅎ
애초 클래스 설계의 문제랄까요
알려주신 링크를 보니 개연성이 상당히 높네요. 감사합니다. 궁금증이 좀 풀렸습니다. 이런 자잘한(?) 이슈들까지 다 꿰뚫고 있는 고수들이 대단해 보입니다.
2009/11/11 19:37 [ ADDR : EDIT/ DEL ]저 부동소숫점 문제는 "상식적으로 실행되는 것은 아니나 버그는 아니다..." 정도로 정리가 되는 건가요? (어째 헌재 언론법 판결 버젼... ^^ ) 컴퓨터는 참 어렵습니다.
템플릿을 dummy함수에 몽땅 집어 넣어놓는 것은 당근 편법이죠. 팩토리 오브젝트를 해 보려다... ^^