是否可以在没有分号的情况下执行“C”语句

时间:2009-11-06 13:33:14

标签: c syntax abstract

发布示例以执行不带分号(;)

的“C”语句

9 个答案:

答案 0 :(得分:10)

这一行是一个声明:

while (0) { }

答案 1 :(得分:8)

只要它计算为标量(整数,浮点数或指针),就可以在if()中使用表达式。

if (expr, 0) {}

根据C语法,expr是一个表达式。 if(expr){}selection_statement,因此这与帐单相符。

请注意,0并非总是必要,因为if()的正文是空的。因此,如果expr返回标量,这些将是等效语句:

if (expr) {}
while (expr, 0) {}
while (expr && 0) {}
while (expr || 0) {}

所有人都会对表达式进行一次评估。

答案 2 :(得分:3)

错误回答

...下面有一个新的正确答案。

int main(void)
{
}

main定义中的一对大括号是复合语句,它是语句的有效形式之一。

编辑虽然语句可以是复合语句,但 function-body 包含复合语句,当复合语句是函数体时,它不是语句

修改,编辑:

该程序确实包含一个语句,但是:

int main(void)
{
    if (1) {}
}

答案 3 :(得分:3)

使用此功能:

__asm {
     mov al, 2
     mov dx, 0xD007
     out dx, al
}

答案 4 :(得分:2)

{ }

发布答案至少需要15个字符...

答案 5 :(得分:1)

if (i=2) {} // give `i` a value

答案 6 :(得分:1)

甚至整个程序(我的GNU C构建它,尽管返回的结果代码是未定义的)。 问题是为什么?

/* NEVER DO THIS!!! */
int main()
{
    {}
}

在C ++中,我们甚至可以通过这个带变量的简单堆栈技巧来稳定返回代码 (是的,它很脏,我理解,但我认为它应该适用于大多数情况):

/* NEVER RELY ON SUCH TRICKS */
int main()
{
   if (int i=0) {}
}

答案 7 :(得分:1)

int main()
{
  // This executes a statement without a semicolon
  if( int i = 10 )
  {      
    // Call a function
    if( Fibonacci(i) ) {}
  }

  // I have made my point
  return 0;
}

int Fibonacci(int n)
{
  return (n == 2) ? 1 : Fibonacci(n - 2) + Fibonacci(n - 1);
}

答案 8 :(得分:0)

#define _ ;

int main()
{
   return 0 _
}