0

我想知道我是否可以在不引入新示例的情况下同时分配一个值并检查它是否在 C 条件表达式中发生了变化。考虑test以下示例中固定的函数(我不想更改其参数或返回值)。main我在打印的例程中搜索条件的变体,"works"因为测试例程的值n增加了 1。即我想与 nsing 的旧值进行比较。同时它应该打印"works not"如果n不会被测试增加。我想知道这是否有可能利用评估顺序或其他东西的规则,即不引入存储值的新变量n

#include <stdlib.h>
#include <stdio.h>

int test(int n)
{    
    return n + 1;    
}

int main()
{    
  int n;

  if ((n = test(n)) == n) {
     printf("works not\n");
  } else {
     printf("works\n");
  }

  return 0;    
}
4

2 回答 2

1

简短的回答:不,你不能。有关更长的解释,请查看序列点

于 2012-09-20T15:46:08.987 回答
0

不,你不能这样做,这是未定义的行为,因为在赋值和比较之间没有序列点。

于 2012-09-20T15:44:21.953 回答