我可以使用花括号代替#pragma region 吗?
Can I use curly braces instead of #pragma region?
我正在为基于 arduino 的开发板开发代码,我正在使用 VSCode,因为我发现它比 Arduino IDE。
现在,在代码的某些部分,我喜欢将某些语句组合在一起,以便更好地组织代码。在 C# 中(使用 Visual Studio)我会使用 #region NAME
来做到这一点。它的 C 变体是 #pragma region
,但是,我发现这会使代码混乱,并且不像我想要的那样干净。
相反,我想到了使用花括号 {}
来实现类似的功能,但据我所知,编译器使用它们来声明作用域,对吗?像这样使用它们也是如此:
char *data;
{
free(data);
}
产生任何奇怪的行为?根据我的尝试,编译器似乎并不介意,但也许我还没有尝试足够的案例。
所以,我想我想知道的是:以这种方式使用花括号是否会对 C 中的通用编码产生不利影响?
复合语句形成块作用域。
例如这个代码片段
int x;
int y = 10;
x = y;
不等同于tp
int x;
{
int y = 10;
}
x = y;
在最后一种情况下,编译器将发出错误,指出标识符 y
未声明。
另外,使用多余的大括号会降低代码的可读性和混淆性。
- Arduino 不只是 C,只是 C++。
- 在 C++ 中组织代码的最佳方式是使用 类 和结构。
- 在C#中region用于大纲时在编辑器中折叠和展开代码,对代码执行没有影响。 Arduino IDE 没有任何这些花哨的编辑器功能。
- C 或 C++ 中的复合语句与 C# 中的
#region
完全不同。它创建了一个影响代码编译和执行的新作用域。
使用块对语句进行分组并关闭它们对于合适的目的来说是很好的。我不时遇到的一种情况是,由于边界效应,矩阵需要对其第一行和最后一行进行单独处理。然后代码可能如下所示:
{
int row = 0;
// Code for first row.
}
for (int row = 1; row < N-1; ++row)
{
// Code for middle rows.
}
{
int row = N-1;
// Code for last row.
}
通常这三种情况的代码在很大程度上是相似的,并且使用它们中的每一个都使这种相似性在视觉上对 reader 更加明显。同时,每个案例的缩进级别相同使得差异更容易看出。
类似地,块可以组织一个函数的部分,这些部分是半重复的但不涉及循环(并且没有足够的参与来配得上它们自己的功能,或者使用太多的变量以至于传递它们的参数将是一个一团糟)。
块由 C 标准明确定义,不会产生任何“奇怪的行为”。
我正在为基于 arduino 的开发板开发代码,我正在使用 VSCode,因为我发现它比 Arduino IDE。
现在,在代码的某些部分,我喜欢将某些语句组合在一起,以便更好地组织代码。在 C# 中(使用 Visual Studio)我会使用 #region NAME
来做到这一点。它的 C 变体是 #pragma region
,但是,我发现这会使代码混乱,并且不像我想要的那样干净。
相反,我想到了使用花括号 {}
来实现类似的功能,但据我所知,编译器使用它们来声明作用域,对吗?像这样使用它们也是如此:
char *data;
{
free(data);
}
产生任何奇怪的行为?根据我的尝试,编译器似乎并不介意,但也许我还没有尝试足够的案例。
所以,我想我想知道的是:以这种方式使用花括号是否会对 C 中的通用编码产生不利影响?
复合语句形成块作用域。
例如这个代码片段
int x;
int y = 10;
x = y;
不等同于tp
int x;
{
int y = 10;
}
x = y;
在最后一种情况下,编译器将发出错误,指出标识符 y
未声明。
另外,使用多余的大括号会降低代码的可读性和混淆性。
- Arduino 不只是 C,只是 C++。
- 在 C++ 中组织代码的最佳方式是使用 类 和结构。
- 在C#中region用于大纲时在编辑器中折叠和展开代码,对代码执行没有影响。 Arduino IDE 没有任何这些花哨的编辑器功能。
- C 或 C++ 中的复合语句与 C# 中的
#region
完全不同。它创建了一个影响代码编译和执行的新作用域。
使用块对语句进行分组并关闭它们对于合适的目的来说是很好的。我不时遇到的一种情况是,由于边界效应,矩阵需要对其第一行和最后一行进行单独处理。然后代码可能如下所示:
{
int row = 0;
// Code for first row.
}
for (int row = 1; row < N-1; ++row)
{
// Code for middle rows.
}
{
int row = N-1;
// Code for last row.
}
通常这三种情况的代码在很大程度上是相似的,并且使用它们中的每一个都使这种相似性在视觉上对 reader 更加明显。同时,每个案例的缩进级别相同使得差异更容易看出。
类似地,块可以组织一个函数的部分,这些部分是半重复的但不涉及循环(并且没有足够的参与来配得上它们自己的功能,或者使用太多的变量以至于传递它们的参数将是一个一团糟)。
块由 C 标准明确定义,不会产生任何“奇怪的行为”。