是否可以执行“C”?不带分号的语句

发布于 2024-08-10 21:25:26 字数 29 浏览 2 评论 0原文

发布一个示例来执行不带分号的“C”语句(;)

Post an example to execute a "C" statement without semicolon( ; )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

淡淡的优雅 2024-08-17 21:25:26

这一行是一个声明:

while (0) { }

This line is a statement:

while (0) { }
权谋诡计 2024-08-17 21:25:26

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

if (expr, 0) {}

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

请注意,,0 并不总是必需的,因为 if() 的主体是空的。因此,如果 expr 返回一个标量,那么这些语句将是等效的:

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

All 都会对表达式求值一次。

You can an expression in an if() as long as it evaluates to a scalar (integer, floating point number or pointer).

if (expr, 0) {}

According to the C grammar, expr is an expression. if(expr){} is a selection_statement, so this would match the bill.

Note that the ,0 isn't always necessary since the body of the if() is empty. So these would be equivalent statements, if expr returns a scalar:

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

All would evaluate the expression once.

与风相奔跑 2024-08-17 21:25:26

错误答案

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

int main(void)
{
}

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

编辑:虽然语句可以是复合语句,并且函数体函数体组成>复合语句,当复合语句是函数体时,它不是语句

编辑,编辑:

这个程序确实包含一个被执行的语句,但是:

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

Wrong answer

... with a new right answer below.

int main(void)
{
}

The pair of braces in the definition of main is a compound-statement which is one of the valid forms for a statement.

Edit: although a statement can be a compound-statement, and a function-body consists of a compound-statement, when the compound-statement is a function-body, it's not a statement.

Edit, Edit:

This program does contain a statement which is executed, though:

int main(void)
{
    if (1) {}
}
空城旧梦 2024-08-17 21:25:26

使用这个函数:

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

Use this function:

__asm {
     mov al, 2
     mov dx, 0xD007
     out dx, al
}
烟雨凡馨 2024-08-17 21:25:26

{ }

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

{ }

At least 15 characters are required to post an answer...

红墙和绿瓦 2024-08-17 21:25:26
if (i=2) {} // give `i` a value
if (i=2) {} // give `i` a value
唱一曲作罢 2024-08-17 21:25:26

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

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

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

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

Even whole program (my GNU C built it despite result code returned is undefined).
The question is WHY?

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

And in C++ we even can stabilize return code by this simple stack trick with variable
(yes, it is dirty, I understand but I think it should work for most cases):

/* NEVER RELY ON SUCH TRICKS */
int main()
{
   if (int i=0) {}
}
Spring初心 2024-08-17 21:25:26
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);
}
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);
}
娇俏 2024-08-17 21:25:26
#define _ ;

int main()
{
   return 0 _
}
#define _ ;

int main()
{
   return 0 _
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文