2

C関数の定義(動的ウィンドウマネージャーのソース)でブロックの奇妙な使用法を見つけました。

これは、関数の定義内のブロックです。このファイルの944行目に例があります。これは何ですか?

void
grabbuttons(Client *c, Bool focused) {
  updatenumlockmask();
  {
    unsigned int i, j;
    unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
    //some more code
  }
}
4

2 に答える 2

12

それは単にブロックです。内部で宣言された変数は外部では使用できないため、一連の変数のスコープを制限するために使用できます。

しかし、多くの場合、読みやすくするためにコードを整理するために使用され、追加の詳細を示唆または思い出させるために (または単にエディターから追加レベルのインデントを強制するために) 使用されます。

lockDatabase();
{
    // this code is all within the database lock:


}
unlockDatabase();

さらに、古い C 標準では、変数宣言はブロックの先頭のみに制限されていました。その制限の下では、関数またはその他の (ブロックされた) 制御構造の先頭ですべての変数を宣言するか、追加の変数を宣言するという目的のためだけに新しい裸のブロックを導入するかを選択できます。

于 2012-07-07T23:44:18.893 に答える
1

C ブロックの使用法は、ロジックを残りのコードから分離することです。これが役立ついくつかのシナリオを次に示します。

  1. 複数回呼び出してはならない関数。ブロック内にそのコードを記述することをお勧めします。
  2. C 言語では、変数は関数の先頭でのみ宣言できます。したがって、より多くの変数を必要とし、関数の残りのコードとは別の機能を必要としないコードは、コード ブロックに配置できます。
于 2012-07-09T05:09:37.013 に答える