当我们在头文件中有原型时,我们的静态分析工具会抱怨“返回类型上的无用类型限定符”,例如:
const int foo();我们这样定义它是因为函数返回一个永远不会改变的常量,认为有了const,应用编程接口似乎更清晰。
为了清晰起见,我觉得这类似于显式地将全局变量初始化为零,即使C标准已经声明,如果不显式初始化,所有全局变量都将被初始化为零。说到底,这真的无关紧要。(但静态分析工具不会抱怨这一点。)
我的问题是,有没有理由这样做会导致问题?我们应该忽略工具产生的错误,还是应该以不太清晰和一致的API为代价安抚工具?(它返回该工具没有问题的其他const char*常量。)
发布于 2009-10-16 18:04:07
const int foo()与const char* foo()非常不同。const char* foo()返回一个数组(通常是一个字符串),该数组的内容不允许更改。想一想它们之间的区别:
const char* a = "Hello World";和
const int b = 1;a仍然是一个变量,可以赋值给其他不能改变的字符串,而b不是一个变量。所以
const char* foo();
const char* a = "Hello World\n";
a = foo();是允许的,但是
const int bar();
const int b = 0;
b = bar();是不允许的,即使使用bar()的const声明也是如此。
https://stackoverflow.com/questions/1579435
复制相似问题