当我尝试使用赋值运算符而不是深度复制来复制包含指针的结构时,是否有任何GCC警告提醒您注意?GCC警告,用于识别包含指针的复制结构
4
A
回答
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"
// ...
}
相关问题
- 1. 包含结构的结构与包含指针的结构
- 2. NativeCall结构包含指针
- 3. 复制的结构指针的指针
- 4. 复制C中包含char指针的两个结构
- 5. 引用指向结构的指针,该结构包含指向结构的指针的指针
- 6. 包含指向其他结构的指针的结构
- 7. 指向包含结构的结构的指针
- 8. GCC发出警告函数指针对象的指针铸造
- 9. Ç - 加载结构包含一个指针的指针
- 10. 将指针复制到指向结构中某个结构的指针C
- 11. 没有指针的复制结构
- 12. 对包含指针的向量排序为结构VS结构
- 13. 如何复制使用指针,以结构的结构?
- 14. 如何使用cudaMalloc/cudaMemcpy指向包含指针的结构的指针?
- 15. C:深度复制 - 结构,空指针
- 16. 如何复制结构指针
- 17. 警告:从不兼容的指针类型(指针和结构)分配
- 18. 复制包含unique_ptrs的结构向量
- 19. GCC警告“解引用类型指针会破坏严格别名规则”
- 20. CUSE IOCTL回复包含指向字符数组的指针的结构
- 21. 警告:复制包资源构建阶段包含此目标的Info.plist文件
- 22. 声明包含指向该类型结构的指针数组的结构体
- 23. (gcc)用于无警告编译的多点阵列或双指针
- 24. 如何包含一个指针,指向指针结构,其是malloc的块
- 25. 警告关于C函数指针
- 26. gcc的警告功能(兼容的指针类型)
- 27. 警告的指针赋值
- 28. 警告:赋值时将整数指针,未在结构
- 29. 初始化指针结构 - 编译器警告
- 30. C库警告(指针强制转换)
在最近的GCC版本中,您可以使用'gcc --help = warnings'来获取列出的所有警告。 –
'-Wall'给出了一些最有用的警告;它不会给你所有的警告。 'Wall -Wextra';有一些深奥的警告并不是由任何一个触发的。 –
@EvanLi这仍然是错误的。 – melpomene