如何在g++中设置警告,以警告返回指向局部变量的指针
How to set warning in g++ for warning of returning pointer to local variable?
我认为这两个函数都有问题,因为它们返回指向堆栈中分配的局部变量的引用/指针:
int &func1() {
int a = 3;
return a;
}
int *func2() {
int a = 3;
int *p = &a;
return p;
}
但是当我使用编译命令g++ -Wall时,为什么它只给func1警告而不给func2警告?是因为func2可以被有意地用于某些目的,还是可以通过添加其他参数来设置警告?我的g++版本是4.6.3,在Ubuntu 12.04上。
编译器无法知道你在func2中返回的指针要做什么。
你也可以返回一个数组的实例,例如:
int *func2() {
int a = 3;
int *p = &a;
/*some useful stuff*/
if (some_criteria)
p = new int[10];
return p;
}
因为编译器没有能力计算返回的指针的语义
对于上面的@kebs gcc.gnu.org/onlinedocs/gcc/Warning-Options.html,有一个选项(-Wno-return-local-addr)可以做到这一点,默认情况下使用-Wall(我检查过了)。
然而,我有像
这样的东西 char * foo(string bar) {
return bar.c_str();
}
没有警告。但是bar是一个本地值的副本,尽管-Wall,它仍会静默返回。
应该有额外的&
char * foo(string &bar) {
return bar.c_str();
}
浪费时间在一个大程序中跟踪这个几乎总是正确的
相关文章:
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 返回语句后的代码,没有警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 返回非 void 的函数中没有返回语句警告
- 返回 *这会给出 Weffc++ 警告
- 有没有办法在从临时返回按值string_view时获得编译器警告?
- C++未使用的变量警告,即使我在函数结束时返回它
- libmysql:警告:返回局部变量"行"的地址(C++/C)
- 警告 C6031 返回值在宏扩展中被忽略
- 警告:返回对临时 - 奇怪情况的引用(对 Rvalue 的澄清)
- 是否有将引用返回到临时引用的C++警告?
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 如何获取有关 Visual Studio 代码分析中未经检查的函数返回值的警告
- "警告:并非所有控制路径都返回值"是什么意思?(C++)
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 模板类型推导警告返回对本地临时对象的引用
- 为什么 g++ 警告返回对临时的引用
- 如何在g++中设置警告,以警告返回指向局部变量的指针
- 如果我们在c++中使用static关键字删除[-Wreturn local-addr](警告:返回本地变量的地址),可以