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