C返回类型最佳实践

问题描述:

示例代码如此不完美。假设我需要从函数返回一个数组和一个int(无法分别计算它们,因此需要一个函数)。 这三种方式中的哪一种会是最好的设计方式?C返回类型最佳实践

int * return_pointer(int *num){ 
    int *arr = calloc(5,sizeof(int)); 
    //compute num and do stuff with arr 
    *num = computed_value; 
    return arr; 
} 

int return_int(int *arr){ 
    int num = 0; 
    //compute num and do stuff with arr 
    num = computed_value; 
    return num; 
} 

void no_return(int *arr, int *num){ 
    //compute num and do stuff with arr 
    *num = computed_value 
} 

如下

int main(){ 
    int *arr = calloc(5,sizeof(int)); 
    int num = 0; 

    // first function 
    arr = return_pointer(&num); 

    // second function 
    num = return_int(arr); 

    // third function 
    no_return(arr, &num); 

    free(arr); 
} 

所有3个功能将把内部ARR和num相同的值的这些所谓在主每一个。从设计和可读性来看,哪一个最适合使用?

+1

@cwallenpoole示例代码在Code Review上偏离主题。 – Peilonrayz

+0

@cwallenpoole是不是这与设计类别在这里有关的stackoverflow?我想是的,如果它是脱离话题关闭它,我会在codereview中创建它 –

+0

你也许可以通过编辑恢复在这里的问题,而是问一个开放式的问题,这三个版本之间有什么区别 - 没有提到可读性或“什么是最好的”。由于对这些问题的回答通常会导致以意见为基础,因此这里的人们往往对可读性问题不满。 – Lundin

第二个是语义上最接近的功能(返回int)。第一个是不必要的复杂,最后一个更容易出错,更容易被误用。