C速记{}
我继承了一些代码,当调用它时,它的格式是这样的。明确地说,某些函数定义如下:C速记{},c,syntax,C,Syntax,我继承了一些代码,当调用它时,它的格式是这样的。明确地说,某些函数定义如下: 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) {
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?
}
我以前从未见过这样的语句,我觉得因为某些函数是空的,并且从不返回值,所以它永远不会运行括号中的代码。复合语句是一个{
,后面是零个或多个声明和语句,后面是}
。复合语句被视为单个语句
通常,复合语句用作由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
提供一个局部范围,因此复合语句是{
,后跟零个或多个声明和语句,后跟}
。复合语句被视为单个语句
通常,复合语句用作由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++中更有用,其中自动存储持续时间变量的析构函数将在范围出口中自动运行。 < P>这是有效的语法,但在这种情况下没有好的用途。删除额外的大括号不会改变代码的含义
但是,如果您想限制局部变量的范围,则放置额外的大括号有时很有用。例如,如果我想交换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++中更有用,其中自动存储持续时间变量的析构函数将在范围出口处自动运行。是否尝试在调试器中通过代码来查看发生了什么?某个函数无效,因此不能使用返回值。您确定复制的代码正确吗?我希望在第二个代码块的第一行有一个分号。你确定它不是某个函数(…);{…}
?换句话说,调用一个函数,然后是一段代码。是的,对不起,我写了一个示例,没有直接复制,这可能违反了这里的规则:);现在已添加到正确的位置。{{{{}}
是C语言中的有效语句。是否尝试在调试器中单步执行代码以查看发生了什么?某些函数无效,因此无法使用返回值。您确定复制的代码正确吗?我希望在第二个代码块的第一行有一个分号。你确定它不是某个函数(…);{…}
?换句话说,调用一个函数,然后是一段代码。是的,对不起,我写了一个示例,没有直接复制,这可能违反了这里的规则:);现在添加到正确的位置。{{{{}}
是C中的有效语句。