2012-11-30 35 views
4

当我尝试使用赋值运算符而不是深度复制来复制包含指针的结构时,是否有任何GCC警告提醒您注意?GCC警告,用于识别包含指针的复制结构

+0

在最近的GCC版本中,您可以使用'gcc --help = warnings'来获取列出的所有警告。 –

+2

'-Wall'给出了一些最有用的警告;它不会给你所有的警告。 'Wall -Wextra';有一些深奥的警告并不是由任何一个触发的。 –

+0

@EvanLi这仍然是错误的。 – melpomene

回答

4

答案是否定的。请参阅gcc warning options的列表。

由于在同一个页面,警告是:

警告是报告是非本质错误,但有危险或暗示有可能已被错误诊断的结构信息。

而浅拷贝而不是深拷贝既没有风险也没有错误,因为它可能是预期的行为。所以没有理由存在这种警告选项。

你可能想要的是一个静态的分析,如clang's one,虽然我所知,这一个不提供那种功能。

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()': 

但离开构造函数/析构函数出来,警告甚至没有发出,所以这个选项没有按编译不适用于你的代码,即使在C++编译模式


编译的C代码在C++模式:

(使用extern "C")来实现二进制互操作性。它通常很简单

extern "C" 
{ 
# include "my.h" 
# include "stuff.h" 

// ... 
} 
相关问题