是否已len正确初始化且安全set_array通话?
void object_copy (Object* self, Object* obj) {
int len;
object_set_array (self, object_get_array (obj, &len), len);
}
Run Code Online (Sandbox Code Playgroud)
如果没有,你会推荐什么?
否 - 对函数调用的参数没有定义的评估顺序.
即使调用object_get_array()具有调用之前发生object_set_array()编译器计算并传递给,价值object_set_array()为len可以在编译器可以调用之前完成参数object_get_array().
我不确定object_set_array()调用的第二个参数是什么- 也许你想使用逗号运算符:
void object_foo (Object* self, Object* obj) {
int len;
object_set_array (self, (object_get_array (obj, &len), len));
}
Run Code Online (Sandbox Code Playgroud)
哪个会起作用,但令人困惑,我不建议这样做.
我想你想要的是:
void object_foo (Object* self, Object* obj) {
int len;
object_get_array (obj, &len); // get the length from obj
object_set_array (self, len)); // set the len for self
}
Run Code Online (Sandbox Code Playgroud)