当我尝试使用赋值运算符而不是深度复制复制包含指针的结构时,是否有任何 GCC 警告警告?
问问题
272 次
2 回答
4
答案是不。请参阅 gcc警告选项列表。
给定相同的页面,警告是:
警告是诊断消息,它们报告本质上不是错误但有风险或暗示可能存在错误的构造。
浅拷贝而不是深拷贝既没有风险也没有错误,因为它可能是一种预期的行为。所以没有理由存在这样的警告选项。
您可能想要的是一个静态分析器,例如clang's one,但据我所知,这个分析器不提供那种功能。
于 2012-11-30T07:26:10.040 回答
1
我记得正好看到这样的警告-Weffc++
当然,您必须愿意在 c++ 模式下进行编译。(见下文)
编辑我对其进行了测试:遗憾的是,这不会警告 POD(即)C 类型。这是测试:
struct HasPointer
{
int* resource;
HasPointer() {};
~HasPointer() {};
};
编译
E:\mingw64>g++ test.c -Weffc++
输出
test.c:1:8: warning: 'struct HasPointer' has pointer data members [-Weffc++]
struct HasPointer
^
test.c:1:8: warning: but does not override 'HasPointer(const HasPointer&)' [-Weffc++]
test.c:1:8: warning: or 'operator=(const HasPointer&)' [-Weffc++]
test.c: In constructor 'HasPointer::HasPointer()':
但是将 ctor/dtor 排除在外,甚至不会发出警告,因此此选项不适用于您的代码,即使在 C++ 编译模式下也是如此。
在 C++ 模式下编译 C 代码:
(使用extern "C"
)实现二进制互操作。它通常很简单
extern "C"
{
# include "my.h"
# include "stuff.h"
// ...
}
于 2012-11-30T07:29:25.493 回答