不熟悉 C shorthand { }
unfamiliar C shorthand { }
我继承了一些代码,调用时有这样的格式。要清楚一些函数是这样定义的:
void some_function(int a, int b, int c){
printf("hi there\n");
}
然后在主代码中这样调用:
some_function(2, 3, 4);
{
x = 1200;
another_function(&x);
}
以上只是简写:
if(some_function(2,3,4) == 1)
{
//then execute code found here?
}
我以前从来没有见过那个,我觉得既然some_function是无效的并且永远不会returns一个值它永远不会运行括号中的代码?
一个复合语句是一个{
,后跟零个或多个声明和语句,再后跟一个}
。复合语句被视为单个语句。
通常复合语句被用作if
、while
、for
等控制的语句:
if (condition)
{
blah;
blah;
}
但它可以在任何可以使用单个语句的地方使用。 (复合语句有时称为 块;严格来说,复合语句是一种块。)
它可以用作定义局部变量的一种方式:
blah;
{
int n = 42;
/* ... */
}
/* n is not visible here */
在你的例子中:
some_function(2, 3, 4);
{
x = 1200;
another_function(&x);
}
额外的{
和}
是合法的,但是没用;它们可以被省略而不改变程序的含义。 (作者可能打算将这些陈述标记为 合乎逻辑的 分组。)
复合语句与函数调用没有逻辑关系;它恰好跟随它。
如果代码是这样的话,在这里使用复合语句会更有意义:
some_function(2, 3, 4);
{
int x = 1200;
another_function(&x);
}
因为它会为变量 x
.
提供局部作用域
这是有效的语法,但在这种情况下没有任何用处。删除多余的大括号不会改变代码的含义。
但是,如果您想要限制局部变量的范围,则放置额外的大括号有时是有用的。例如,如果我想交换 a
和 b
的值,我可能会写
int a;
int b;
// Lots of code that assigns values to `a` and `b`.
{
int temp;
temp = a;
a = b;
b = temp;
}
所以不要用 temp
变量乱扔命名空间。这在 C++ 中更有用,其中具有自动存储持续时间的变量的析构函数将在范围退出时自动 运行。
我继承了一些代码,调用时有这样的格式。要清楚一些函数是这样定义的:
void some_function(int a, int b, int c){
printf("hi there\n");
}
然后在主代码中这样调用:
some_function(2, 3, 4);
{
x = 1200;
another_function(&x);
}
以上只是简写:
if(some_function(2,3,4) == 1)
{
//then execute code found here?
}
我以前从来没有见过那个,我觉得既然some_function是无效的并且永远不会returns一个值它永远不会运行括号中的代码?
一个复合语句是一个{
,后跟零个或多个声明和语句,再后跟一个}
。复合语句被视为单个语句。
通常复合语句被用作if
、while
、for
等控制的语句:
if (condition)
{
blah;
blah;
}
但它可以在任何可以使用单个语句的地方使用。 (复合语句有时称为 块;严格来说,复合语句是一种块。)
它可以用作定义局部变量的一种方式:
blah;
{
int n = 42;
/* ... */
}
/* n is not visible here */
在你的例子中:
some_function(2, 3, 4);
{
x = 1200;
another_function(&x);
}
额外的{
和}
是合法的,但是没用;它们可以被省略而不改变程序的含义。 (作者可能打算将这些陈述标记为 合乎逻辑的 分组。)
复合语句与函数调用没有逻辑关系;它恰好跟随它。
如果代码是这样的话,在这里使用复合语句会更有意义:
some_function(2, 3, 4);
{
int x = 1200;
another_function(&x);
}
因为它会为变量 x
.
这是有效的语法,但在这种情况下没有任何用处。删除多余的大括号不会改变代码的含义。
但是,如果您想要限制局部变量的范围,则放置额外的大括号有时是有用的。例如,如果我想交换 a
和 b
的值,我可能会写
int a;
int b;
// Lots of code that assigns values to `a` and `b`.
{
int temp;
temp = a;
a = b;
b = temp;
}
所以不要用 temp
变量乱扔命名空间。这在 C++ 中更有用,其中具有自动存储持续时间的变量的析构函数将在范围退出时自动 运行。