gpt4 book ai didi

c - 当取消引用和后递增指向函数指针的指针时,首先发生什么?

转载 作者:行者123 更新时间:2023-12-04 12:20:44 28 4
gpt4 key购买 nike

给定这段代码:

 typedef void (*Thunk)();
Thunk* gFP;

void foo(){ printf("Foo "); *gFP(); };
void bar(){ printf("Bar ");

Thunk Codex[] = { foo, bar };

gFP = Codex;

(*gFP++)();

函数调用发生在自增之前还是之后?
即:这会打印“Foo Foo Foo ...”还是“Foo Bar”?

最佳答案

这只是我个人的看法。我不是 100% 相信这是正确的。所以,如果我的回答有误,请见谅。

C99 6.5.2.2/10 函数调用 说:

The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.

C99 6.5.2.4/2 后缀递增和递减运算符说:

The side effect of updating the stored value of the operand shall occur between the previous and the next sequence point.

后增量运算符的副作用是在下一个序列点。假设表达式 f( x ),我认为在fx求值之后有一个序列点,并且在函数调用之前。所以,gFP++的side effect会在函数调用之前完成,问题中的代码预计会打印 Foo Bar

编辑:我删除了 C99 和 C++ 中 Annex-C 的引号,并添加了引号C99.
可能之前的引述对这个问题含糊不清。

关于c - 当取消引用和后递增指向函数指针的指针时,首先发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108664/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com