묻고 답하고
여기에 올렸던 글인데 뾰족한 답변이 아직 없어서.. ^^;;
현 프로젝트에서 변수를 선언하는 매크로를 사용하고 있습니다. 이 매크로는 동일 브레이스내에서는 한 번만 쓸 수 있겠지요... 두번 이상 쓰면 변수명이 중복될 테니까요. 그런데 문제는 두번 이상 사용해야 할 일이 있다는 겁니다. 변수의 소멸자를 이용한 작업이라서 브레이스를 따로 열어서 해결할 수도 없는 문제입니다. 매크로를 사용할 때마다 생성되는 변수병이 달라져야 한다는 것이지요.
요약하면 Visual Studio에서 컴파일 옵션 변경 없이 컴파일타임에 결정되는 랜덤 변수명을 생성할 수 있느냐 하는 질문입니다. 그걸 어디다 써? 하고 물으시면 글이 길어지니 그 부분은 말고, 이 부분에 대해 가능한 방법이 혹시 있을지 궁금합니다.
현재는 임시방편으로 비슷한 매크로를 여러개 정의해두었습니다. 누가 봐도 무식한 방법이라... 좀더 Graceful하게 해결하고 싶어요.
2009.05.07 03:00:33 (*.84.255.36)
저두 질문자분께 원하시는 답변인지는 모르겠지만,
포인터형으로 잡구 같은 공간의 주소를 기억하는 방법은 어떠실런지요??
제가보기엔 핸들러 이벤트 함수 또는 스레드에 따른 세마포어 적인 활용을 위해서 그렇게 쓰시는거 같습니다만..
2009.05.07 11:14:40 (*.238.135.240)
답변 감사합니다.
다만..
브레이스가 종료되는 순간 변수자체도 소멸되는 특성을 이용하고 있는 터라.. (자동변수의 소멸자를 이용하는 겁니다.)
브레이스 밖에서 해당 메모리가 유효하면 의미가 없어집니다.
2009.05.07 19:40:14 (*.44.133.5)
해당 매크로 코드를 { } 로 감싸세요. 매크로 코드 내에서만 유효한 변수로 선언됩니다.
그리고 A 를 하기위해 B 라는 해결책을 생각해내곤, 그걸 하기 위해 C 라는 방법을 했는데 안되네요 라고 질문하시면 글 읽기가 곤란해집니다. ㅠㅠ 그냥 처음부터 A 에 대해 질문을 하시는게 나은 경우가 많습니다.
2009.05.11 14:04:11 (*.238.135.240)
그렇게 하면 그 선언한 변수가 매크로 코드 밖에서는 쓸 수 없게 되기 때문에 사용하기 곤란한 방법입니다. 변수의 소멸자를 이용하고 있기 때문에.. 예를 들어 크리티컬 섹션으로 Lock을 건뒤 Unlock하는 작업을 소멸자에게 맡긴다든지. 이런 식인데 매크로 내에서 생겼다가 매크로가 끝날때 없어진다면 의미가 없겠지요. 거기서 생성된 객체를 매크로 밖에서 명시적으로는 이용하지 않으나 실제 동작에서는 해당 객체가 그 매크로가 존재하는 브레이스 안에서는 유지가 되어야 한다는 겁니다. 이에 더불어 브레이스가 끝날때 그 변수도 같이 사라져야 하고요. 해당 매크로가 선언된 브레이스 밖에서 그 객체가 살아있어서도, 또는 브레이스가 끝나기 전에 사라져서도 안되는 상황입니다.
여튼 관심 감사합니다. ^^
그리고 질문을 저렇게 올린 이유는.. 다른곳에서 말씀하신대로 간단히 A에 대한 질문만 올렸더니 "그건 그렇게 하지 말고 아예 다른 방법 쓰시면 됩니다" 내지는 "왜 그렇게 하려는 거죠?" 하는 반문이 계속 올라와서, 그런 질문이 올라올 소지가 없도록 가급적 미리 다 적은 겁니다. 무슨 말씀인지 아실 겁니다. ㅎㅎ
작성된지 6개월이 지난 글에는 새 코멘트를 달 수 없습니다.
의도하시는 부분이 무언지 이해가 잘 안가긴하지만..
일단 스택상에 저런 짓을 하는 것은 가능한지 모르겠습니다. 좀 더 로우레벨까지 들어간다면 방법이 있을 수도 있지 않을까 싶지만..
c나 c++ 언어상에서 원하시는 것이 심플하게 해결될만한 해결책은 생각나는게 없네요..
이런 건 어떠실지..
전역이나 메인블럭에서 map 이든 vector 든 컨테이너 사용 예상되는 타입 갯수만큼 들고 있고... template 으로 인자 타입을 받으면 그에 맞는 변수를 힙에 alloc 시킨다음 그 포인터를 리턴시켜서 컨테이너에 들고있게하는거지요..
프로그램 종료시점에서 컨테이너 안의 변수, 객체들에 대해서 release 시켜야겠구요..