在不引入ANSI C中的额外变量的情况下对原始值进行分配的测试结果

时间:2012-09-20 15:43:08

标签: c

我想知道我是否可以在不引入新示例的情况下同时分配值并检查它是否在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;    
}

2 个答案:

答案 0 :(得分:1)

答案简短:不,你不能。如需更长的解释,请查看sequence points

答案 1 :(得分:0)

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