嵌套调用可能导致C中未初始化的参数?

elm*_*rco 1 c unsafe

是否已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)

如果没有,你会推荐什么?

Mic*_*urr 6

否 - 对函数调用的参数没有定义的评估顺序.

即使调用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)