【问题标题】:GCC C compile error, void value not ignored as it ought to beGCC C 编译错误,void 值没有被忽略,因为它应该被忽略
【发布时间】:2011-09-23 21:08:07
【问题描述】:

我在编译一些 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_ 函数都来自 libspotify

【问题讨论】:

  • 显示sp_session_login()的声明。
  • 你在 C 中定义了 bool?不好的做法。
  • 如果您使用clang,您可能还会收到更好的错误消息。
  • 一个没有错误返回的登录函数,这很奇怪。嗯,很容易理解的错误。
  • @James:如果包含 ,bool 在 C99 中就可以了。

标签: c gcc


【解决方案1】:

错误线到底在哪里?

没有更多信息,我猜它在这里:

sp_error err = sp_session_login(g_sess, username, password, remember_me);

我猜 sp_session_login 正在返回 void。

试试:

static bool login(const char *username, const char *password) {
    sp_session_login(g_sess, username, password, remember_me);
    printf("Signing in...\n");
    return 1;
}

【讨论】:

【解决方案2】:

这通常意味着你将一个 void 函数的返回值分配给某个东西,这当然是一个错误。

在你的情况下,我猜sp_session_login 函数是无效的,因此是错误的。

【讨论】:

    【解决方案3】:

    我猜sp_session_login 被声明为返回void 而不是sp_error,并且有一些替代方法可以确定它是否成功。

    【讨论】:

      【解决方案4】:

      看起来sp_session_login 实际上并没有返回任何东西。特别是,它不会返回sp_error,所以这不可能。你无法真正绕过它。

      【讨论】:

        【解决方案5】:

        您必须在使用前声明 void 函数。尝试将它们放在主函数之前或调用之前。 您还可以执行一项操作:您可以告诉编译器您将使用 void 函数。

        例如,有两种方法可以制作相同的东西:

        #include <stdio.h>
        
        void showMsg(msg){
            printf("%s", msg);
        }
        
        int main(){
            showMsg("Learn c is easy!!!");
            return 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);
        }
        

        【讨论】:

        • 这没有回答问题。 所有 函数应该在使用前声明(C99 要求这样做,这是 C90 中的好习惯)。 OP 已经通过 #include 声明了 sp_session_login 并使用了适当的标头;这就是编译器知道它是void 函数的方式。问题是 OP 试图将 void 函数的不存在结果分配给变量;您的回答没有解决实际问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 2015-12-23
        • 1970-01-01
        • 2016-08-14
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多