当我们的头文件中有原型时,我们的静态分析工具会抱怨“返回类型上有无用的类型限定符”,例如:
const int foo();
我们这样定义它是因为该函数返回一个永远不会改变的常量,认为 API 看起来更清晰const
到位。
为了清楚起见,我觉得这类似于将全局变量显式初始化为零,尽管 C 标准已经声明如果未显式初始化,所有全局变量都将初始化为零。归根结底,这真的不重要。 (但静态分析工具不会抱怨这一点。)
我的问题是,这是否有任何原因可能导致问题?我们应该忽略该工具生成的错误,还是应该以 API 不太清晰和一致为代价来安抚该工具? (它返回其他const char*
该工具没有问题的常量。)
通常,您的代码最好尽可能准确地描述正在发生的情况。您收到此警告是因为const
in const int foo();
基本上是没有意义的。只有当您不知道 API 的含义时,该 API 才会显得更清晰const
关键字的意思。不要这样过多地表达含义;static
事实已经够糟糕了,没有理由增加更多混乱的可能性。
const char *
意味着不同于const int
确实如此,这就是为什么你的工具不会抱怨它。前者是指向常量字符串的指针,这意味着调用返回该类型的函数的任何代码都不应该尝试修改字符串的内容(例如,它可能位于 ROM 中)。在后一种情况下,系统无法强制您不对返回的结果进行更改int
,所以限定符没有意义。与返回类型更相似的是:
const int foo();
char * const foo2();
这都会导致您的静态分析发出警告 - 将 const 限定符添加到返回值是毫无意义的操作。仅当您有一个引用参数(或返回类型)时才有意义,例如您的const char *
例子。
事实上,我只是做了一个小测试程序,GCC甚至明确警告了这个问题:
test.c:6: warning: type qualifiers ignored on function return type
因此,不仅仅是静态分析程序在抱怨。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)