1

我知道{}用于分隔实体,例如函数、类和条件分支,但是它们在这里还有什么其他用途?

#import <stdio.h>

int main(void) {
    {{{
        printf("main\n");
    }}}
    return 0;
}

编辑:

我发现它可能主要用于信息隐藏以及嵌套函数。从下面的答案来看,它们似乎可以在调试期间用作标记并在发布中被删除,但这不应该得到认可。

4

4 回答 4

5

将代码括在大括号中{ }会创建一个Scope
创建本地范围可能有多种原因,例如:

  • 允许您在封闭范围内重用变量名。
  • 在函数中间定义变量。
    在 c89 中不允许在除作用域开头之外的任何位置创建变量,但从 c99 开始允许。

在线示例代码示例

#include<stdio.h>

int main()
{
    int i = 10;
    {
         int i = 5;
         printf("i is [%d]\n",i);
    }
    printf("i is [%d]\n",i);

    return 0; 
}

在您的示例代码中,
额外的{&}没有任何用途,它们只是冗余代码。

正如@Martin 在评论中所建议的那样,由于在 & 中包含代码与{{{&}}}类似,因此它可以用作标记/模式以便于搜索。{}

但是,就个人而言,我更喜欢使用会在搜索中显示的关键字向代码添加适当的注释,而不是添加此类冗余代码。

于 2012-01-27T03:50:13.463 回答
2

该语法(连续三个大括号)在标准 C 中没有任何特殊含义。此类代码的作者可能会使用它来指示内部代码的某些内容,例如它只是用于调试。

于 2012-01-27T03:50:37.943 回答
2

你可以引入一个新的范围,然后允许你引入新的变量......这在 C89 中很有用。虽然不太正常,但偶尔有用。

{
  int x =2 ;
  printf("%d", x);
  {
    int y = 7;
    printf("%d", y);
  }
}
于 2012-01-27T03:54:44.173 回答
0

正如 Als 所提到的,额外的大括号为您提供了范围。这可以有效地用于智能指针的情况。例如,考虑以下 C++ 代码(MSVC 编译器)

int i = 0;
i++;
//More code follows 
...

{
    CComBSTR bstr("Hello");
    //use this bstr in some code
    .....
}

结束大括号后,bstr将不可用。此外,由于它已经超出范围,因此析构函数也将被自动调用。

于 2012-01-27T03:54:12.963 回答