调用 C 函数之前的 C99 参数评估
C99 parameter evaluation before C function is called
我知道这个问题和this one类似,但我感觉我对C99标准没有完全理解。我想问的是参数求值本身,例如:
int index = 0;
sprintf(somebuf, "some-text-%d", index++);
所以,似乎索引在函数调用之前没有递增(结果我得到了 some-text-0)。这是预期的行为吗?
通过使用 post 递增运算符(++
跟在 index
之后),首先使用该值,然后递增。如果你想使用增量值,你应该使用预增量运算符(++index
)。仅供参考,这可以追溯到最早的 C 版本。
我知道这个问题和this one类似,但我感觉我对C99标准没有完全理解。我想问的是参数求值本身,例如:
int index = 0;
sprintf(somebuf, "some-text-%d", index++);
所以,似乎索引在函数调用之前没有递增(结果我得到了 some-text-0)。这是预期的行为吗?
通过使用 post 递增运算符(++
跟在 index
之后),首先使用该值,然后递增。如果你想使用增量值,你应该使用预增量运算符(++index
)。仅供参考,这可以追溯到最早的 C 版本。