3

我第一次使用 Lint,它告诉我以下内容:

parameter 'p_h_attr' of function
    'get_dev_info_service_id_attr(ble_attribute_t *)' could be const

对于此功能:

static void get_dev_info_service_id_attr(ble_attribute_t *p_h_attr)
{
    p_h_attr->p_attr = (void *)ble_char_system_id_value;
    p_h_attr->attr_len = sizeof(ble_char_system_id_value);
}

但是,当然,如果我将 p_h_attr 设为 const,编译器会抱怨,因为我正在写入传递的指向结构的指针。

我该如何解决这个问题?

4

3 回答 3

7

Lint 建议您创建p_h_attr一个 const 指针,而不是指向 const 的指针。const关键字的位置很重要。预期的是:

static void get_dev_info_service_id_attr(ble_attribute_t * const p_h_attr)
    ...

但正如其他人在评论中指出的那样,为 C 函数声明参数 const 至少是有争议的:没有收益,因为它是按值传递的。当然,指向 const 的指针是完全不同的事情。

于 2020-07-20T13:33:38.373 回答
3

我认为这意味着以下

static void get_dev_info_service_id_attr(ble_attribute_t * const p_h_attr)
{
    p_h_attr->p_attr = (void *)ble_char_system_id_value;
    p_h_attr->attr_len = sizeof(ble_char_system_id_value);
}

那是指针本身应该是常量而不是指向的数据。尽管对指针使用限定符 const 没有什么意义,因为它是按值传递的。那就是参数是函数的局部变量

于 2020-07-20T13:34:44.767 回答
1

大多数 linter 可以选择向 linter 抱怨的特定行添加异常,但这样做是不正确的。您应该检查 linter 的文档以了解如何防止将其视为错误。

通常,此类异常采用特殊格式的注释形式,指示 linter 跳过下一行、某个代码块或所有文件中的特定 linter 警告/错误(这可能不会出现在注释中,而是直接出现在某些文件中)配置文件,其中 linter 保存了规则)。

编辑

我意识到,更仔细地阅读,其他答案更好地回答了你的问题。不过,希望这对您将来有所帮助!

于 2020-07-20T13:32:30.357 回答