突然あらわれた{ } について – プログラミング – Home

突然あらわれた{ } について
 
通知
すべてクリア

[解決済] 突然あらわれた{ } について


ベホマラー
 ベホマラー
(@ベホマラー)
ゲスト
結合: 24年前
投稿: 2
Topic starter  

他人のコードを解析しているのですが、ソースを見ておりましたら
突然{ }でくくられた処理がありました。(下記参照)
↓このような感じです。
---
memset(Buf, '\0', sizeof(Buf));
GetPrivateProfileString(FileName, HelpFilePath, ", Buf, iBufSize, iniPath);

if(NULL == Buf[0])
{
return FALSE;
}

// この下のくくりが疑問点
{
char sz[_MAX_PATH+1], *lpsz;
strcpy(sz, Buf);
if(GetFullPathName(sz, sizeof(Buf), Buf, &lpsz)==0)
strcpy(szBuffer, sz);
}

---
※if文の下にあるので、elseのかき忘れかな?と思ったのですが、ちがうようです。
この場合、{ }があるのと無いのとではどのような違いがあるのですか?教えて下さい。
よろしくお願いします。


引用未解決
トピックタグ
ん
 ん
(@ん)
ゲスト
結合: 24年前
投稿: 81
 

> char sz[_MAX_PATH+1], *lpsz ;

この変数が {} でくくられた範囲でのみ有効となりますので
明示的に「ここからここまでで、閉じた処理」としたい場合に
このような記述をする人もいるようです。

もっと上手い説明がありましたら他の方お願いします。


返信引用
フマキラー
 フマキラー
(@フマキラー)
ゲスト
結合: 24年前
投稿: 3
 

僕も見たことはあるけど自分ではほとんど使わないので
知ってる知識だけ言うと
{}でくくった部分はブロックといって、
変数の寿命はブロック内。
つまりこの場合、ブロック内で宣言されている
char sz[_MAX_PATH+1], *lpsz;
の寿命は、ブロック内まで。
ブロックの外に出ると寿命は切れてます。

どんなメリットがあるかは、もっと詳しい人フォローお願いしマース。
#とりあえず見やすくなる(?)かな

# switch(i)
# {
#  case 0:
# {
# int = 0;
# }
# }
#こんなのができるし・・・


返信引用
フマキラー
 フマキラー
(@フマキラー)
ゲスト
結合: 24年前
投稿: 3
 

ごめんなさい
switch(abc)
{
case 0:
{
int i = 0;
}
}
こうの間違いです


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 24年前
投稿: 187
 

こんにちは
詳しいことはわからないのですが

for( int i = 0; i < 10; i++) TRACE( %d\n, i );
TRACE(2回目のi \n );
{
for( int i = 0; i < 20; i++) TRACE( %d\n, i );
}
こんなことが出来ます。
デバック時に変数名がダブってるときに使ったくらいですが。


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 24年前
投稿: 119
 

>{ }があるのと無いのとではどのような違いがあるのですか?
最適化に影響します。具体的には、オプティマイザに最適化しやすくするヒントを与えます。

例えば、{}で寿命をなるべく短く設定すれば、そのブロック内の変数に割り当てられていた
レジスタが早い段階で解放されます。すると、それをいち早く他用途に当てる事ができます。

ただ、私の場合は
「名前のバッティングを気にせずデバッグコードを書きたい時に使う」
事が多いです。

私は デバッグ用コードを短い変数名(i等)で書く事が多い為、すぐに正規コードの変数名
(ループカウンタ等)とバッティングします。それを避ける為に{}でバリヤをはります。
デバッグ完了後も、コード削除範囲が分かりやすいという利点もあります。


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 24年前
投稿: 180
 

これは?
http://member.nifty.ne.jp/yamazaki/doc_data01.html


返信引用
ベホマラー
 ベホマラー
(@ベホマラー)
ゲスト
結合: 24年前
投稿: 2
Topic starter  

みなさまからたくさんのレスを頂き、誠に感謝いたします。
気になっていたことが解消され、非常に勉強になりました。
お教え頂いたホームページも大変参考になりました。ありがとうございます。
そして、こういった有用な掲示板を提供・運営されておられます管理人様にも
感謝したいと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました