【问题标题】:How do you use the user keyword "list"?您如何使用用户关键字“列表”?
【发布时间】:2020-05-07 20:54:46
【问题描述】:

对于我正在从事的实际工作,我必须为某些功能使用“预设”结构。其中之一如下:

int initEmployees(Employee* list, int len)
{

//From here is my code

    int isError = -1;
    if ( len > 0)
    {
        len--;
        for (int i = 0 ; i < len ; i++)
        {

//This line is the problem, I know is not right but not sure how to fix it
            list[i].isEmpty = 1;

/*My other guesses where:
*(list + i).isEmpty = 1;
(*Employee + i).isEmpty = 1;
but im quiet sure they won't work either*/

        }
        isError=0;
    }
    return isError;
}

尝试谷歌搜索:“代码块用户关键字是否与 STL 相关!”并通过一本 1991 年的 C 书(西班牙语编辑)检查它是否继续引用任何包含它但没有的库。

【问题讨论】:

  • 不确定问题是什么,但C中没有list关键字。
  • 不清楚你在问什么。此外,这个问题缺少调试信息(预期的行为、最小的可重现示例、实际行为等)这也与 [codeblocks]...
  • 注意,感谢您的提示。我会记住他们的

标签: c keyword


【解决方案1】:

首先,list 在这种情况下是一个变量名,而不是关键字。

如果Employee 结构实际上一个isEmpty 成员,您可以将1 分配给该成员,那么该循环代码没有任何问题。

它只是遍历一个提供的数组(称为list),依次将每个元素设置为空。

但是,您对 len 的操作似乎有点不对劲,我怀疑它不会修改列表中的最后一个元素,因为您在运行循环之前将其递减。

我怀疑一个更规范的版本(包括那个修复)会是这样的:

int initEmployees(Employee* list, int len) {
    // Error if no elements in list.

    if (len < 1) return -1;

    // Mark each entry as empty.

    for (int i = 0 ; i < len ; i++) {
        list[i].isEmpty = 1;
    }

    // Everything is okay.

    return 0;
}

但我也想在列表大小为零时提出错误。在我看来,修改空列表的所有元素是完全可以的 - 只需要什么都不做。

而且,如果你对事物的大小使用无符号值(例如,size_t),你的“负面”问题就会消失。

【讨论】:

  • (尝试对其进行硬编码)该死的他是对的我是个白痴,我花了 3 个小时来思考这个关于 {len} 你也是对的
  • 是的,教说我每个函数不能使用多个返回。关于它的一些东西是可读的。无论如何谢谢!
  • @PlainSight:这就是学术界和现实之间的区别 :-) 虽然,为了公平对待您的教育工作者,多个返回点可能成为复杂代码的问题,因此它们'在最初的教育中引导你远离那个可能是正确的。随着您变得更加熟练,您会发现这条规则并非一直都是正确的(例如在“快速失败”场景的函数中早期使用return)。您可以重新引入 isError 内容以使我的代码适应“一个出口点”策略。
【解决方案2】:

list 不是 C 中的关键字。

见:https://en.cppreference.com/w/c/keyword

【讨论】:

  • 在代码块中,它以斜体绿色显示,用于用户关键字(通常在某些库中引用,如 STL C++ 中的“end”和“beguin”)
  • 不知道该告诉你什么。它不是 C 关键字。
  • @PlainSight:有可能为 C++ 而不是 C 设置着色。在前者中,list 是一个标准集合类,所以这是有道理的。 CodeBlocks 中的User 关键字是特殊的语法项,但它们不是像forint 这样的保留 关键字,所以我认为这可能只是术语上的误解。跨度>
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
相关资源
最近更新 更多