GCC C编译错误,无效值未按应忽略

GCC C编译错误,无效值未按应忽略,c,gcc,C,Gcc,我在编译一些C代码时遇到问题。 当我编译时,我会得到以下错误: player.c: In function ‘login’: player.c:54:17: error: void value not ignored as it ought to be 这是错误代码: static bool login(const char *username, const char *password) { sp_error err = sp_session_login(g_sess, user

我在编译一些C代码时遇到问题。 当我编译时,我会得到以下错误:

player.c: In function ‘login’:  
player.c:54:17: error: void value not ignored as it ought to be
这是错误代码:

static bool login(const char *username, const char *password) {
    sp_error err = sp_session_login(g_sess, username, password, remember_me);
    printf("Signing in...\n");
    if (SP_ERROR_OK != err) {
        printf("Could not signin\n");
        return 0;
    }
    return 1;
}
有没有办法绕过这种错误?
谢谢

编辑:
所有sp_uu函数都来自libspotify

它通常意味着您将void函数的返回赋值给某个对象,这当然是一个错误


在您的情况下,我猜sp_session_login函数是无效的,因此出现了错误。

我猜
sp_session_login
被声明为返回
void
,而不是
sp_error
,并且有其他方法确定它是否成功。

它看起来实际上并没有返回任何东西。特别是,它不会返回
sp_错误
,因此这是不可能的。你不能真的绕过它。

错误行到底在哪里

没有进一步的信息,我猜是在这里:

sp_error err = sp_session_login(g_sess, username, password, remember_me);
我猜sp_会话_登录将返回无效

尝试:


必须先声明void函数,然后才能使用它们。尝试将它们放在主函数或调用之前。 您还可以做一件事:告诉编译器您将使用void函数

对于Examplo,有两种方法可以制作相同的东西:

#include <stdio.h>

void showMsg(msg){
    printf("%s", msg);
}

int main(){
    showMsg("Learn c is easy!!!");
    return 0;
}
#包括
void showMsg(msg){
printf(“%s”,msg);
}
int main(){
showMsg(“学习c很容易!!!”;
返回0;
}
…另一方面:

#include <stdio.h>

void showMsg(msg); //Here, you told the compiller that you will use the void function showMsg.

int main(){
    showMsg("Learn c is easy!!!");
    return 0;
}

void showMsg(msg){
    printf("%s", msg);
}
#包括
void showMsg(msg)//在这里,您告诉编译器您将使用void函数showMsg。
int main(){
showMsg(“学习c很容易!!!”;
返回0;
}
void showMsg(msg){
printf(“%s”,msg);
}

显示
sp\u session\u login()的声明。
您在C中定义了bool吗?不是很好的做法。如果你使用
clang
,你可能也会收到更好的错误消息。一个没有错误返回的登录函数,这很奇怪。嗯,这是一个可以理解的错误。@James:bool在C99中也可以,如果你包括在内。确认,
sp\u session\u login
是一个
void
函数:这并不能回答问题。所有函数都应该在使用前声明(C99需要声明,这是C90的良好实践)。OP已通过
声明
sp_session_login
;包括
插入适当的标题;编译器就是这样知道它是一个
void
函数的。问题是OP试图将
void
函数的不存在结果分配给变量;你的回答没有解决实际问题。
#include <stdio.h>

void showMsg(msg); //Here, you told the compiller that you will use the void function showMsg.

int main(){
    showMsg("Learn c is easy!!!");
    return 0;
}

void showMsg(msg){
    printf("%s", msg);
}