의미가 없지는 않습니다.
저의 경우에는 개념적인 블록을 나누기 위해
{ } 를 자주 사용합니다.
{ 앞에 설명을 붙이면서, 여기는 머머하는 부분이다..
음..
근데.. 저기는..
dasomoli님이 얘기한거 말고는 별 의미를 찾기 힘들군요..
전반적인 부분을 봐야 의미가 있는지 없는지 알 수 있겠지만...
^^;;;
WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra
첫째로 namespace를 분리하기 위해 사용할 수 있습니다. 저렇게 쓰면 저 안에서만 의미를 가지는 i를 선언할 수 있죠.
또한 int가 아닌 class등을 사용하면 저 scope에서만 사용되고 destruct되는 class를 사용할 수도 있습니다. 예를 들어 class가 mutex의 lock을 constructor에서 잡아주고 destructor에서 풀어주는 식으로 짰다면 그 클래스를 블럭 제일 앞에 local 변수로 선언해 줘도 되겠죠..
C 에서는 모르겠으나, C++ 에서는 생성자 소멸자를 통한 편한 lock 을 구현하기 쉽습니다.
예를 들자면, 생성자에서 a 를 받아서, a 에 lock 을 걸고, 소멸자에서 받아놓은 a 의 lock 을 푸는 클래스를 만든 후 scope 가 끝나면 지역 객체가 사라지는 것을 이용합니다.
class EZLock
{
public:
EZLock(mutex lockobj)
{
m_lockobj = lockobj;
lock(m_lockobj);
}
~EZLock()
{
release(m_lockobj);
}
mutex m_lockobj;
}
와 같은 클래스를 쓴 후 다음처럼 lock 을 씁니다.
{
EZLock(thisLock);
for ( int i=0; i<100; ++i)
{
if ( i == iWantValue) return;
}
}
간단히 생각나는 대로 짜봤는데 일반적인 락을 쓰면 return 을 할 때 release 를 해주고 나가는 등 신경(!) 을 써야하지만 저런 클래스를 하나 만들면 scope 를 나가면서 알아서 소멸자를 불러줘서 release 가 호출되죠.
C 에서는 모르겠으나, C++ 에서는 생성자 소멸자를 통한 편한 lock 을 구현하기 쉽습니다.
예를 들자면, 생성자에서 a 를 받아서, a 에 lock 을 걸고, 소멸자에서 받아놓은 a 의 lock 을 푸는 클래스를 만든 후 scope 가 끝나면 지역 객체가 사라지는 것을 이용합니다.
class EZLock
{
public:
EZLock(mutex lockobj)
{
m_lockobj = lockobj;
lock(m_lockobj);
}
~EZLock()
{
release(m_lockobj);
}
mutex m_lockobj;
}
와 같은 클래스를 쓴 후 다음처럼 lock 을 씁니다.
{
EZLock(thisLock);
for ( int i=0; i<100; ++i)
{
if ( i == iWantValue) return;
}
}
간단히 생각나는 대로 짜봤는데 일반적인 락을 쓰면 return 을 할 때 release 를 해주고 나가는 등 신경(!) 을 써야하지만 저런 클래스를 하나 만들면 scope 를 나가면서 알아서 소멸자를 불러줘서 release 가 호출되죠.
오옷.. 그렇군요!! 좋은거 하나 배우고 갑니다 :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
C++ 이 아닌 C 코드라면 변수 선언 하려고 한게 아닌가 싶군요.
C++ 이 아닌 C 코드라면 변수 선언 하려고 한게 아닌가 싶군요.
그리고 저렇게 하면 for 문 끝내고 i 변수가 죽-_-잖아요~ ㅋ
dasomoli의 블로그(http://dasomoli.org)
dasomoli = DasomOLI = Dasom + DOLI = 다솜돌이
다솜 = 사랑하옴의 옛 고어.
Developer! ubuntu-ko! 다솜돌이 정석
의미가 없지는 않습니다.저의 경우에는 개념적인 블록을 나누기 위해
의미가 없지는 않습니다.
저의 경우에는 개념적인 블록을 나누기 위해
{ } 를 자주 사용합니다.
{ 앞에 설명을 붙이면서, 여기는 머머하는 부분이다..
음..
근데.. 저기는..
dasomoli님이 얘기한거 말고는 별 의미를 찾기 힘들군요..
전반적인 부분을 봐야 의미가 있는지 없는지 알 수 있겠지만...
^^;;;
WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra
dasomoli님이 말씀하신 것 이외에는 다른 이유는 없어보입니다.
dasomoli님이 말씀하신 것 이외에는 다른 이유는 없어보입니다.
C99부터는 저럴 필요도 없어졌습니다만.
가끔 쓰는 트릭인데..첫째로 namespace를 분리하기 위해 사
가끔 쓰는 트릭인데..
첫째로 namespace를 분리하기 위해 사용할 수 있습니다. 저렇게 쓰면 저 안에서만 의미를 가지는 i를 선언할 수 있죠.
또한 int가 아닌 class등을 사용하면 저 scope에서만 사용되고 destruct되는 class를 사용할 수도 있습니다. 예를 들어 class가 mutex의 lock을 constructor에서 잡아주고 destructor에서 풀어주는 식으로 짰다면 그 클래스를 블럭 제일 앞에 local 변수로 선언해 줘도 되겠죠..
그런 정도 용도로 사용할 수 있겠습니다.
[b]dasomoli[/b]님이 말하신 이유가 맞는듯 하네요.단
dasomoli님이 말하신 이유가 맞는듯 하네요.
단 for문의 첫번째에서 int i = 0 이라고 해줘도 되었을법한데...
───────────────────────
yaourt -S gothick elegant
khris'log
Visual C++ 6's hack이기도 합니다. Visual C++ 6
Visual C++ 6's hack이기도 합니다. Visual C++ 6는 아래의 소스를 C++에서 사용할 때 scope가 제대로 되지 않습니다.
다른 이유라면 C99 이전의 C언어에서 scope를 제한 하기 위해서 이겠지요.
- 죠커's blog / HanIRC:#CN
[quote="CN"]Visual C++ 6's hack이기도 합니다.
아, 생각납니다. 예전에 이거 때문에 소스 고치느라고 삽질한 적 있는데...
으으... 갑자기 분노가... :evil:
C 에서는 모르겠으나, C++ 에서는 생성자 소멸자를 통한 편한 lock
C 에서는 모르겠으나, C++ 에서는 생성자 소멸자를 통한 편한 lock 을 구현하기 쉽습니다.
예를 들자면, 생성자에서 a 를 받아서, a 에 lock 을 걸고, 소멸자에서 받아놓은 a 의 lock 을 푸는 클래스를 만든 후 scope 가 끝나면 지역 객체가 사라지는 것을 이용합니다.
간단히 생각나는 대로 짜봤는데 일반적인 락을 쓰면 return 을 할 때 release 를 해주고 나가는 등 신경(!) 을 써야하지만 저런 클래스를 하나 만들면 scope 를 나가면서 알아서 소멸자를 불러줘서 release 가 호출되죠.
-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com
Re: { } 블럭이 의미가 있나요?
brew 코드군요. :D
함수중간에서 변수선언을 하기 위해 { ... }을 자주 쓰더군요.
ADS에서 C99를 지원하면 저렇게 안써도 될텐데...
[quote="zelon"]C 에서는 모르겠으나, C++ 에서는 생성자
오옷.. 그렇군요!! 좋은거 하나 배우고 갑니다 :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
C++이라면 andrei의 scope guard도 괜찮더군요.
C++이라면 andrei의 scope guard도 괜찮더군요.
- 죠커's blog / HanIRC:#CN
댓글 달기