2 ms·
I've commonly seen it used for both. Really anything that the function will write to.
by kevincox 6y ago
I've commonly seen it used for both. Really anything that the function will write to.
- masklinn 6y ago> I've commonly seen it used for both That's a good reason to rename one of them because they're completely different semantics and behaviour, and confusing one for the other is a direct route to segfault city.
- comex 6y agoFrom another perspective, they're both performing the same operation on different types. With what you'd call "destination passing", like char *buf = malloc(128); snprintf(buf, 128, "hello"); the function is accepting a pointer to an uninitialized array of char, and initializing the array of char. With what you'd call an "out parameter", like char *buf; asprintf(&buf, "hello"); the function is accepting a pointer to an uninitialized pointer to array of char, and initializing the pointer. The caller still controls the allocation of storage for the pointer itself.
- arka2147483647 6y agoAt this point of the lifetime C-language, hoping for the commonly accepted terminology to change, is probably futile. Anyway, for out parameters, the common convention is: Caller provides one object for output: void callee(Obj *obj); Caller provides an array for output: void callee(Obj *obj, size_t obj_size); Caller provides an pointer, to which callee allocates a new object: void callee(Obj **obj)