创建int函数,如果出现错误,则无法返回有效的int值

时间:2013-04-01 15:37:00

标签: c function error-handling struct return-value

我试图创建一个函数将返回结构中的值。我的问题是试图找出我可以通过函数返回的内容theInfo = NULL

以下是我到目前为止所创建的内容。这可能吗?

int getTime(struct * theInfo){  
  if(theInfo != NULL){
      return theInfo->waitTime;
  }
  else{
    printf("getTime Patron is nonexistent\n");
    return(thePatron);
  }
}

3 个答案:

答案 0 :(得分:2)

您需要返回两条信息 - 数字,以及该数字是否有效的指示。一种方法是更改​​函数的签名以指示它是否返回任何内容,如果是,则将该值保留在变量中。以下是如何执行此操作的示例:

// This function returns 1 or 0.
// 1 indicates success; 0 indicates failure
// If your compiler is up to C99 standard, use "bool" instead of "int" below
int getTime(struct * theInfo, int *result) {
    if(theInfo != NULL){
        *result = theInfo->waitTime;
        return 1;
    } else{
        // result stays unchanged
        return 0;
    }
}

现在您可以像这样使用这个新功能:

int res;
if (getTime(&myInfo, &res)) {
    printf("getTime returned %d\n", res);
} else {
    printf("getTime Patron is nonexistent\n");
}

当您不需要返回完整范围的数字时,可以使用不太常用的替代方法。例如,如果函数返回的有效时间始终为正,则可以采用使用负数表示存在错误的约定。这种方法也是有效的,但它更多地依赖于约定,因此您的代码的读者需要查看您的函数文档以查看正在发生的事情。

答案 1 :(得分:2)

您可以传递一个指针并返回一个表示成功的布尔值:

bool getTime(MyStruct* info, int* time) {  
    if (info) {
        *time = info->waitTime;
        return true;
    }
    *time = 0;
    return false;
}

然后你会打电话给某个地方:

int time;
if (!getTime(info, &time)) {
    // TODO: retrieval of time failed
}

答案 2 :(得分:2)

返回-1。我确信等待时间总是积极的。

如果为NULL则返回-1,然后检查-1

else{
    printf("getTime Patron is nonexistent\n");
    return -1;
  }


void someFunc() {
//...
   int wtime = getTime(astruct);
   if (wtime == -1)
       // error

//...
}