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

Rad*_*row 2 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);

 }
Run Code Online (Sandbox Code Playgroud)

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

小智 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);
Run Code Online (Sandbox Code Playgroud)

请注意我如何无法再次声明serial_num?所以我什至无法保持块相同,我必须删除该行。如果我想在之前引入类似的块,我需要将声明向上移动。如果我想更改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);
}
Run Code Online (Sandbox Code Playgroud)

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

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