c - 为什么我们要将一段代码放在大括号内?

标签 c syntax coding-style

<分区>

我遇到了这段我无法向自己解释的 C 代码:

 check_eeprom_data();
 {

     unsigned char serial_num[5];
     printStr("\nSerNUM:");
     eeprom_read(confEE_SERIAL_NUM, serial_num, 5);
     printBuffAsHex(serial_num, 5);

 }

为什么需要这些大括号来括起这部分代码?如果没有括号,它有什么不同?

最佳答案

大括号是为了方便并行代码结构。也就是说,假设您想再次执行相同的操作。如果没有大括号,您将无法剪切和粘贴该代码块,也许需要修改。这是因为您只能在任何范围的顶部声明一次 serial_num。所以它会像这样出来:

unsigned char serial_num[5];
printStr("\nSerNUM:");
eeprom_read(confEE_SERIAL_NUM, serial_num, 5);
printBuffAsHex(serial_num, 5);

printStr("\nSerNUM:");
eeprom_read(confEE_SERIAL_NUM, serial_num, 5);
printBuffAsHex(serial_num, 5);

注意到我不能再次声明 serial_num 了吗?所以我什至不能保持 block 不变我必须删除该行。如果我想在我需要将声明上移之前引入类似的 block 。如果我想更改 serial_num 的长度,我会被卡住,因为您只能在任何范围内声明一次 serial_num

有了大括号,我就有了一个平行的视觉结构(无论是否进行修改,剪切和粘贴都是理想的选择),而且我还可以灵活地在每个范围内声明具有不同长度的 serial_num

{
  unsigned char serial_num[5];
  printStr("\nSerNUM:");
  eeprom_read(confEE_SERIAL_NUM, serial_num, 5);
  printBuffAsHex(serial_num, 5);
}

{
  unsigned char serial_num[8];
  printStr("\nSerNUM:");
  eeprom_read(confEE_SERIAL_NUM, serial_num, 8);
  printBuffAsHex(serial_num, 8);
}

注意到单独的作用域如何允许一个人独立处理每个 block 而不会相互干扰吗?所以我可以重新排序 block ,即使它们使用相同的符号名称 serial_num 也不必担心更改 serial_num 的声明。事实上,无论符号名称是否与其他 block 匹配,我都可以在本地为每个 block 适本地声明 serial_num

这种常见模式用于增加不同本地代码块之间的隔离,这些代码块不应相互干扰,声明从一个 block 泄漏到下一个 block 。它可以保护您免受符号名称冲突的影响,并在您希望每个 block 尽管与周围的其他 block 相似但仍保留本地 flavor 时防止意外重用符号。

关于c - 为什么我们要将一段代码放在大括号内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31311257/

相关文章:

c - 从 Valgrind 源代码访问用户变量

c++ - 将 vera++(或其他编码约定工具)与 Qt/QtCreator 集成

C# 标准 : rationale for "Do not provide public event member variables"?

assembly - ARM当前程序状态寄存器(SPSR)读-修改-写策略实践

c - Yacc - 使用 %union 和链表构建数据结构

c - C 程序 malloc 赋值返回 NULL 的可能原因?

将十六进制扫描 (scanf) 从无符号整数数组转换为十进制

Apache 2.4.3 和 PHP 5.4.7 上的 PHP 语法错误(foreach 模板语法)

取消引用类成员变量的 C++ 语法

Java语法问题: Why I have to put the clamps there?