C 代码上的 Lint:函数的参数(指针)可以是 const。 *但是*我正在写信给传递的指针
Lint on C code: parameter of function (a pointer) could be const. *But* I am writing to passed pointer
我是第一次使用 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,编译器会报错,因为我正在写入传递的结构指针。
我该如何解决这个问题?
大多数 linter 都可以选择向 linter 抱怨的特定行添加异常,但这样做是不对的。您应该检查 linter 的文档以了解如何防止将其视为错误。
通常,此类异常采用特殊格式的注释形式,指示 linter 跳过下一行,或某个代码块,或所有文件中的特定 linter warning/error(这可能不会在评论中,但直接到一些配置文件,其中 linter 已保存规则)。
编辑
我发现,仔细阅读后,其他答案可以更好地回答您的问题。不过希望这对您以后有所帮助!
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 的指针是完全不同的东西。
我觉得是下面的意思
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 没有什么意义,因为它是按值传递的。即参数是函数的局部变量
我是第一次使用 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,编译器会报错,因为我正在写入传递的结构指针。
我该如何解决这个问题?
大多数 linter 都可以选择向 linter 抱怨的特定行添加异常,但这样做是不对的。您应该检查 linter 的文档以了解如何防止将其视为错误。
通常,此类异常采用特殊格式的注释形式,指示 linter 跳过下一行,或某个代码块,或所有文件中的特定 linter warning/error(这可能不会在评论中,但直接到一些配置文件,其中 linter 已保存规则)。
编辑
我发现,仔细阅读后,其他答案可以更好地回答您的问题。不过希望这对您以后有所帮助!
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 的指针是完全不同的东西。
我觉得是下面的意思
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 没有什么意义,因为它是按值传递的。即参数是函数的局部变量