Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
去年关门了。
1)函数是否应该检查每个指针参数的空值?
void do_stuff(char** object1, char** object2, ...) {
    if (object1 == NULL) {
        return;
    }
    if (object2 == NULL) {
        return;
    }
    ...

2)当一个函数创建一个动态对象时,它应该返回一个指向新创建的对象的指针,还是应该将它赋给它的参数?
void allocate_object(char** object);


char** allocate_object(void);

3)当一个函数打算分配一个对象而没有分配时,如何将结果通知调用方?
return -1;


object = NULL;

4)谁(通常)负责(检查,自由)指针参数:函数还是它的调用方?
5)是否有任何指导方针或资源可以回答类似的问题?
使用C++和它的类,每个对象都拥有它的所有者。这,再加上RAII和异常处理帮助我回答问题。在C语言中,我还没有理解这一点。

最佳答案

1)应根据上下文使用空检查。
在函数中保持空检查总是更好的,除非空是一个预期的解决方案。
2)最好像下面的函数一样返回错误代码。
如果我们想传递一些附加信息和指针参数,最好返回一个错误或状态代码。

int32_t allocate_object(char* object);// error code type will be int32_t

3)枚举比int更好地服务于此作业。创建一个包含各种错误情况的枚举。
enum etype_error
{
    E_SUCCESS = 0,
    E_INVALID_INPUT = -1,
    E_FILE_NOT_FOUND = -2,
    ...
};

4)在c和c++中,没有人负责指针的分配和释放,您可以在任何时候执行。
在分配它的同一块中解除分配它是唯一的好做法。
所以,最好由调用者自己释放指针。
5)我不确定是否有一本好的C语言参考教科书。
但是对于C++,有效的C++和Scott Meyers更有效的C++是很好的书,有很多的指导和编程实践。我相信这会有很大帮助。

关于c - 动态对象(使用C指针处理)传递给函数时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48502752/

10-11 22:06
查看更多