在函数参数

时间:2016-03-30 22:44:30

标签: c

我想我可能知道答案,但我想确保我完全理解。

我在C中编写了一个Queue结构,以及在Queue结构上使用的操作。我想弹出队列,检索一个元素。这个元素将是我函数的第一个参数。我想再次弹出队列,检索第二个元素。第二个元素是我的第二个参数。

例如:

e1 = pop(Q);
e2 = pop(Q);
myfunction(e1, e2);

我想以更加顺畅的方式做到这一点,不需要我制作两个一次性变量。

我的假设如下:

myfunction(pop(Q), pop(Q))

但我不能100%确定这是否正确。

这是对的吗?有没有更明智的方法来实现这个目标?

2 个答案:

答案 0 :(得分:2)

函数参数的评估顺序是未定义的,因此第二个片段可能与第一个片段相同或不同。

在这种情况下,myfunction(pop(Q), pop(Q))会导致未定义的行为。

另见Compilers and argument order of evaluation in C

答案 1 :(得分:0)

除了迈克尔的答案之外,如果这是一个经常重复的构造,你也可以创建一个函数if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } ,它将抽象掉样板。

此外,除非您弹出整数或类似内容,否则更实际的代码最终会显示为:

myFunctionFromQueue(Q)