确保返回的指针为const,而不会引发警告

问题描述 投票:0回答:1

我的目标是为我的库定义一个干净的API。我的函数之一返回了一个指针,该指针不得使用指针算术进行修改。为此,我计划在函数原型中使用const关键字。

这是一个简单的例子:

int global_var = 12;

int* const access_global_var(){ return &global_var;}

int main(void) {
  int* const ptr = access_global_var();

  *ptr = 15;  //< Should be valid 
  ptr++;      //< Should be Invalid 
  return 0;
}

它按预期工作:编译器在ptr++;处引发错误。

问题:使用-Wextra clang / gcc标志进行编译时,出现以下警告:

warning: 'const' type qualifier on return type has no effect

此警告正确吗?有什么我想念的吗?有没有更好的方法来实现我要完成的任务?正如警告在我的项目中被视为错误一样,这是有问题的。谢谢

c warnings compiler-warnings
1个回答
0
投票

函数的返回类型

int* const access_global_var(){ return &global_var;}

没有意义。

如果您在任何情况下都不能删除限定符const,例如,可能不会写

++access_global_var();

因为该函数返回一个右值。

但是即使您具有限定符const也可以编写

int *p = access_global_var();

然后

++p;

也就是说,您可以将一个常量值分配给一个非常量对象。

因此,编译器警告说,在返回类型中使用的限定符没有意义,可以在不更改,logic的情况下将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.