【问题标题】:C "void value not ignored as it ought to be" error on a function that returns an int返回 int 的函数上的 C“不应忽略的 void 值”错误
【发布时间】:2018-09-26 00:10:52
【问题描述】:

我有以下代码并且正在获取

“错误:无效值没有被忽略,因为它应该被忽略

int ab = findActiveBlock();"

如果 findActiveBlock 设置为 void 但它返回一个 int,我会理解这个错误吗?请帮忙

void updateActiveBlock() {

    int ab = findActiveBlock();
    //code using ab//
}

int findActiveBlock() {
    for (int i = 0; i < BLOCKCOUNT; i++) {
        if(blocks[i].active) {
            return i;
        }
    }
    return 1;
}

附加信息:这是 C,“blocks[]”是结构数组。

【问题讨论】:

  • 那是因为你需要在调用它之前声明 findActiveBlock。
  • @pm100:不太可能。那些不会直接拒绝代码的编译器通常会假设未声明的函数返回int,而不是void

标签: c function struct


【解决方案1】:

我会大胆猜测您的findActiveBlock 实际上已在上面某处预先声明为void-returning 函数。您只是忘记更新该声明以使其与定义匹配。

附:作为附加说明:() 参数列表在 C 中是一个过时的功能。对于没有参数的函数,最好在其声明中使用 (void)

【讨论】:

  • 就是这样!谢谢你!我还在习惯头文件,我总是忘记更新它们。谢谢!!
【解决方案2】:

只是在黑暗中刺伤,但 *.active 是一个函数吗?如果是这样,则需要括号。

 int findActiveBlock() {
    for (int i = 0; i < BLOCKCOUNT; i++) {
        if(blocks[i].active()) {   //added parentheses to active
            return i;
        }
    }
    return 1;
}

【讨论】:

  • C 中没有成员函数。是的,它可能是一个函数指针,但这在上下文中没有任何意义。
  • 如果它是一个函数指针,它就不是一个应该被忽略的空值。这将是一个指向函数值的指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 2016-08-28
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多