1425 次
3 に答える
2
関数名なしの中括弧の使用
答えは、それが何であるかではなく、なぜこれが行われたのかに焦点を当てることができると思います。
たとえば、変数名を再利用して、別の型を使用して別のことを行うことができます (SQLite の例では、名前の競合の危険を冒すのではなく、最初からやり直すときに同じ用語を使用し続けるためにこれを行います)。
{
int i = 2;
...
{
int i = 10; // this is a different variable
// the old value of 'i' will be restored once this block is exited.
}
}
{
void *i = alloca(16 * 1024); // this memory will be freed automatically
... // when the block will be exited
}
ただし、これにより、上記のように、スタックに割り当てられたメモリを解放することもできますalloca()
。
これは、ブロックで定義された変数がもはや必要ないことをコンパイラーに明確に示しています (これは、CPU レジスターが他のタスクのために解放されていることを確認するのに役立ちます)。
ご覧のとおり、スコープの定義には、表面的な用途と技術的な用途があります。どちらも便利です。
于 2012-12-13T15:55:22.590 に答える