在C语言中区分返回值和错误

在C语言中区分返回值和错误,c,pointers,posix,C,Pointers,Posix,我正在尝试编写一个函数,它接受一个链表和一个索引,并返回索引+1位置的值 int getData(list *l, int index) { if(...) { ... return result; // this could be -1 } else { return -1; } } 在C语言中,当函数失败时,返回一个值-1(作为一种让用户知道调用失败是因为输入错误的方法)。但是,由于此函数的返回类型为int

我正在尝试编写一个函数,它接受一个链表和一个索引,并返回索引+1位置的值

int getData(list *l, int index) {
    if(...) { 
        ...
        return result; // this could be -1
    }

    else {
        return -1;
    }
}
在C语言中,当函数失败时,返回一个值-1(作为一种让用户知道调用失败是因为输入错误的方法)。但是,由于此函数的返回类型为int,因此它包含值-1(-1作为一个数字,以及ass-2,-3等)


我的问题是:是否有一种机制可以让您从函数返回并让函数的用户知道返回的值实际上是一个错误而不是一个值?

通过传递指针返回值,并使返回值成为一个错误语句:

int getData(list *l, int inIndex, int* outIndex) {
    if(...) { 
        ...
        *outIndex = result;
        return 0;
    }

    else {
        return -1;
    }
}

通过传递指针返回值,并使返回值成为错误语句:

int getData(list *l, int inIndex, int* outIndex) {
    if(...) { 
        ...
        *outIndex = result;
        return 0;
    }

    else {
        return -1;
    }
}

C还是C++?看来你错误地把C++标签添加到这个问题中。对于C,查看<代码> Ern.H./Cuth>——参见“GST <代码> ErnOn/Coo> >系统函数,而不是用户函数。@ Barmar不能设置“<代码> ErnO0</代码>”的值吗?那会被认为是坏习惯吗?@gst这是允许的,只是不寻常。你必须小心,因为如果你调用其他系统函数,C或C++可以从你的下面改变。看来你错误地把C++标签添加到这个问题中。对于C,查看<代码> Ern.H./Cuth>——参见“GST <代码> ErnOn/Coo> >系统函数,而不是用户函数。@ Barmar不能设置“<代码> ErnO0</代码>”的值吗?那会被认为是坏习惯吗?@gst这是允许的,只是不寻常。你必须小心,因为如果你调用其他系统函数,它可能会从你下面被换掉。它应该是
*outidex=result
@Barmar谢谢,犯了这个错误,因为我习惯于用
&
传递引用,这只有在C++中才可能,它应该是
*outidex=result
@Barmar谢谢,犯了这个错误,因为我习惯用C++来引用代码> >代码>,这在C++中是可能的。