首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++最佳实践 | 1. 工具

GCC / Clang -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -Wall -Wextra 合理、标准 -Wshadow 如果变量声明覆盖了父上下文中变量...警告有潜在性能问题强制类型转换 -Wunused 警告任何使用东西 -Woverloaded-virtual 如果重载(而不是覆盖)虚函数,则发出警告 -Wpedantic 如果使用了非标准C...++则发出警告(所有版本GCC, Clang >= 3.2) -Wconversion 可能丢失数据类型转换发出警告 -Wsign-conversion 影响到符号类型转换发出警告(Clang...2 输出格式化函数(即printf)安全问题发出警告 -Wlifetime 显示对象生命周期问题(目前只有Clang特殊分支) 考虑使用-Weverything,并且只在需要情况下禁用少数警告。...通用 一开始就设置非常严格警告,在项目开始后试图提高警告级别可能会很痛苦。 考虑使用警告视为错误设置,例如MSVC中/Wx,以及GCC/Clang-Werror。

3.2K10

如何在编码阶段减少代码中bug?

静态分析工具能够在代码运行情况下分析源代码,发现代码中bug。在C/C++程序中,静态分析工具可以发现程序错误,如空指针取消引用、内存泄漏、被零除、整数溢出、越界访问、初始化前使用等。...Clang是一个优秀静态分析器,能够分析代码中潜在问题。对于上面的问题,GCC 在编译时加上-Wall -Wpedantic编译选项也可以分析出bug。...GCC主要任务是编译代码,静态分析也并不是在每次编译时都需要,而且编译器在做静态分析时需要花费大量时间。...比如空指针,除零,整数溢出,无效移位操作,无效转换,STL无效用法,内存管理,空指针引用,越界检查,初始化变量使用或者重复代码等。...GCC编译代码,并没有报出任何警告错误。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

华为:既满足用户体验,又节省功耗App应用设计开发方法

如何基于LLVM编译器来开发构建一个静态代码分析工具,检测常见错误编码方式,深入浅介绍如何通过编译器来检测持锁释放场景;最后是机器学习在低功耗设计中应用展望,通过机器学习了解用户行为,在应用开发中既满足用户体验...ClangLLVM纽带在于LLVMIR(Intermediate Representation),这也是LLVM核心。...相对GCC来说Clange&LLVM学习曲线更平缓,并且它们使用是BSD License,相比GPL更加优化;高度模块化,比GCC更容易扩展二次开发;另外它们有设计良好接口模式,便于访问内部数据...,如:访问抽象语法树(AST)节点、获取控制流图节点(CFG Node)、进行上下文符号获取等等;ClangC++标准支持更完整、更快;它们还有良好GCC兼容性,包括GCC内置扩展语法、内置关键字支持...;无论是编译速度、内存开销、部分平台上代码执行效率ClangLLVM都超过了GCC

1.5K70

C语言边角料:结构体中指针类型成员变量,它类型重要吗?

本着强迫症要消灭一切警告做法,最终定位到:是结构体内部, 指向结构体类型指针成员变量导致问题。 这个问题,也许永远不会碰到,之所以被我赶上了,应该是因为某个时候手贱, 误碰了键盘导致。...PS: 我测试环境是 Ubuntu16.04-64,编译器使用系统自带 gcc-5.4.0。 二、问题描述 1....gcc 在遇到 struct _Data2_ 这个字符串时,判断它是一个用户自定义数据类型:结构体 _Data2。...以上代码,如果使用clang来编译,结果也是正确。...不过,从中我们也看到了一个现象:gcc编译器在面对结构体时,主要关心是结构体在内存空间中所占用空间大小,其内部指向结构体类型指针,并没有严格检查是否存在,g++ 在这一点就做严谨一些了。

51040

熟悉又陌生arm 编译器详解(armccarmclang)

再来简单看看一些编译器历史,GCC、LLVM以及Clang等,以及文章介绍armcc 以及armclang。...苹果公司之前一直使用GCC作为编译器,但是GCCObjective-C支持一直不怎么好,好多新特性没有增加,所以苹果公司开始寻求编译器替代品。...死代码包括程序结果没有影响可达代码,例如对从未使用局部变量赋值。无法访问代码是专门代码无法通过任何控制流路径访问,例如紧跟在返回之后代码 陈述。 -O1受限优化。...编译器只执行可以描述为调试信息优化。删除使用内联函数使用静态函数。关掉严重降低调试视图优化。如果与 –debug 一起使用,此选项会给出总体上令人满意调试视图且具有良好代码密度。...如果寄存器未声明为C或C++变量,编译器将生成警告 不得在内联程序集代码中保存还原寄存器,编译器会执行此操作。此外,内联汇编程序不提供物理寄存器直接访问。

1.5K40

WebAssembly之emcc编译命令

image.png emcc 用于从命令行调用Emscripten编译器,它实际上是标准编译器gcc或者clang一个替换。...emcc参数介绍 # 显示信息 emcc --help # 显示编译器版本信息 emcc --version 大部分clang或者gcc选项(option)都是可以工作。...如果只是编译到bitcode,那就和clanggcc-g一样。 如果是要编译到JavaScript,-g就等于-g3。...-g3:保留变量名,与-g同。变量名一般不是必须编译后保留,但是如果保留了,可以推断变量目的,吧。 -g4:保留llvm 调试信息,这是能调试最高级别。...取值包括01. 0:不单独生成.mem文件。 1:单独生成.mem文件。 -Wwarn-absolute-paths 启用在-I-L命令行指令中使用绝对路径警告

3.7K20

1.Win10+VsCodeCCPP编译环境搭建

之前电脑没有换固态之前,用过一段时间codeblocks,换了之后就一直用VS了。 这次换vscode原因主要是因为最近看到CPP一些细节东西时候发现VS会完全忽略掉这些错误警告。...印象最深是关于函数返回局部指针变量处理: eg: char * fun() { char *p = "hello"; return p; } 这个函数输入到VS里面是完全没有警告错误...还有:return p;这个是有内存风险,局部指针创建对象在栈上,返回p时候函数调用完毕,指针被赋值给其他全局变量的话,栈上空间就会被释放掉,所以这个也是有警告。...重启之后,Win+r输入cmd打开命令行,分别输入gccclang后回车。 ? 出现如上所示提示认为安装成功。 法2...."panel": "shared" // 不同文件编译信息共享一个终端面板 } // "problemMatcher":"$gcc" // 如果你不使用

4.6K70

近期cmake-toolset一些适配问题

protobuf std::to_string 使用交叉编译适配 protobuf 从 v3.14.0 版本开始依赖 C++11,直接使用了。...所使用 protobuf v3.13.0 里关闭 protoc 单元测试以后,开启 libprotoc 也没有支持,所以也需要Patch一下。...这样可以最大限度地共享已有的编译缓存;另外优化了一些重置cmake会用到环境变量脚本。因为有些构建流程会通过设置环境变量来影响构建选项。 gRPC 新版本编译器适配也有一些问题。...GCC/Clang STL BUG 在适配 gRPC 过程中,我还碰到了一个GCCClangBUG。...我只在GCC上碰到了,但是按 stackoverflow 上相关问题说法Clang也是有问题。我本地Clang版本都比较高,在高版本Clang上是没有这个问题

83340

Androidso体积优化探索与实践

.data:存放是初始值不为零一些可读写变量。 .bss:存放是初始值为零或初始化一些可读写变量。该 section 仅指示运行时需要内存大小,不会占用 so 文件体积。... hidden: default:除非变量或函数特别指定符号可见性,所有符号都在动态符号表中,这也是不使用 -fvisibility 时默认值。...GCC Clang 均支持 LTO。...Clang GCC 均提供了 Os 优化级别,其与 O2 比较接近,但是优化了生成产物体积。而 Clang 还提供了 Oz 优化级别,在 Os 基础上能进一步优化产物体积。...Oz/Os 优化相比于 O3 优化,优化了产物体积,性能上可能有一定损失,因此如果项目原本使用了 O3 优化,可根据实际测试结果以及性能要求,决定是否使用 Os/Oz 优化级别,如果项目原本使用

2.3K31

Theano 中文文档 0.9 - 5.2 Mac OS安装说明

SciPy >= 0.14 当前只有稀疏矩阵特殊功能需要,但强烈推荐。SciPy > = 0.8可以工作,但早期版本稀疏矩阵有已知错误。...安装配置GPU驱动程序(推荐) 警告 现在OpenCL仍然是最小支持。 安装CUDA驱动程序 按照此链接安装CUDA驱动程序CUDA工具包。 你必须在驱动程序安装后重新启动计算机。...注意 对于MacOS你应该能够按照上面的说明来设置CUDA,但要注意以下警告: 如果您想要编译CUDA SDK代码,您可能需要暂时还原为Applegcc(sudo 端口 选择 gcc)作为它们Makefile...安装配置GPU驱动程序(推荐) 警告 现在OpenCL仍然是最小支持。 安装CUDA驱动程序 按照此链接安装CUDA驱动程序CUDA工具包。 你必须在驱动程序安装后重新启动计算机。...注意 对于MacOS你应该能够按照上面的说明来设置CUDA,但要注意以下警告: 如果您想要编译CUDA SDK代码,您可能需要暂时还原为Applegcc(sudo 端口 选择 gcc)作为它们Makefile

1.3K10

内存检测工具——ASan(AddressSanitizer)介绍使用

ASan介绍 ASan全称AddressSanitizer,是一种内存错误检测工具,目的是帮助开发者检测调试内存相关问题,如使用未分配内存、使用已释放内存、堆内存溢出等。...ASan使用使用ASan,你需要使用支持ASan编译器,如ClangGCC,并开启ASan相关编译选项。...使用Clang编译器,在终端执行以下命令: clang -fsanitize=address -g your_program.c -o your_program 使用GCC编译器,在终端执行以下命令:...-g选项用于生成调试符号,以支持调试定位错误。当然,我们也可以通过环境变量方式加入ASan编译选项,然后编译额时候需要加上环境变量,一般是CFLAGS或者CXXFLAGS。...以下是一些常用 AddressSanitizer 编译选项及其作用: Memory Sanitizer (-fsanitize=memory):用于检测初始化内存或使用已释放内存操作。

41810

斩获 3.4k+ Star C++ Insights:用编译器视角看源码!

不过,我们看到是汇编程序,AST Compiler Explorer 输出并不是我写代码语言,因此我这些输出并不熟悉。...于是,我开始着手编写一个基于 Clang 工具,可将基于范围 for 循环转换为编译器内部版本。接着,我结构化绑定 lambda 也做了同样处理。最终,我工作超出了最初计划。...C++ Insights 这个工具显示了运算符调用位置,以及编译器进行类型转换情况,可以推断 auto 或 decltype 背后类型。...请记住,C++ Insights 是基于 Clang 及其 AST 理解而建立。 3、如何构建? C++ Insights 可以在 Clang 源代码树内部或外部进行构建。.../scripts/getinclude.py` 自定义 GCC 安装 如果你用是自定义版本 GCC 编译器,例如 gcc-11.2.0,且安装在编译器默认系统路径中,那么在构建后,Clang 将无法找到正确

13610

xmake v2.3.4 发布, 更加完善工具链支持

项目源码 官方文档 新特性介绍 工具链改进 工具链和平台完全分离 之前版本,平台工具链绑定过于紧密,例如xmake f -p windows 平台,默认只能使用msvc编译,想要切到clang...$ xmake f -p windows --toolchain=clang 内置工具链 虽然xmake交叉编译配置支持所有工具链,也提供一定程度智能分析工具链探测,但通用方案多少特定工具链支持需要追加各种额外配置...这也是推荐做法,因为像gcc/clang等大部分编译工具链,编译器链接器都是配套使用,要切就得整体切,单独零散切换设置会很繁琐。...设置构建行为策略 xmake有很多默认行为,比如:自动检测映射flags、跨target并行构建等,虽然提供了一定智能化处理,但重口难调,不一定满足所有的用户使用习惯需求。...基于gcc flags普及性,xmake采用gccflags命名规范,其根据不同编译实现自动映射,例如: add_cxflags("-O0") 这一行设置,在gcc/clang下还是-O0,但如果当前是

1.4K20

centos7使用vim打造强大pyt

编写插件支持 [ ] –enable-pythoninterp:打开python编写插件支持 [ ] –enable-python3interp:打开python3编写插件支持 [...] –enable-luainterp:打开lua编写插件支持 [ ] –enable-perlinterp:打开perl编写插件支持 [ ] –enable-multibyte:打开多字节支持...` 用以更新或使用 :PluginUpdate:PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存 :PluginClean - 清除使用插件,需要确认; 追加 `!...` 自动批准移除使用插件 :h vundle 获取更多细节wiki以及FAQ 或者通过以下快速安装: vim +PluginInstall +qall 附加 增加clang:添加C语言家族语法补全功能.../install.py --clang-completer 可能出现问题: The ycmd server SHUT DOWN (restart with ':YcmRestartServer').

1.6K30

CC++生态工具链——gccg++编译器使用指南

二,g++gcc区别 gcc可以判断目标程序所使用编程语言类别,会把xxx.c文件当作C语言编译,把xxx.cpp文件当作C++语言编译。...当正在编译C++代码文件依赖STL标准库时候,为了使用STL,gcc命令需要增加参数–lstdc++。因此,虽然gccg++都可以编译C++语言程序,但是使用g++会更方便一些。...静态库链接时,搜索库文件路径顺序: 1. ld会去找GCC命令中参数-L 2. gcc环境变量LIBRARY_PATH 3....macro" -undef #取消任何非标准宏定义 警告与报错参数 -Wall #发出gcc提供所有有用报警信息 -Werror #将警告升级为编译报错 -Wextra / -W #启用...-Wall启用额外警告位,合法但值得怀疑代码发出警告 例如 -Wsign-compare -pendantic / -Wpendantic #发出ISO CISO C++标准列出所有警告

2.2K30

iOS中预编译指令初步探究

关于编译器预定义Log以及它们一些实现机制,感兴趣同学可以移步到gcc文档PreDefine页面clangBuiltin Macro进行查看。...你可以在其中填写任意多-W...以开关某些警告,比如,填写为-Wall -Wno-unused-variable即可打开“全部”警告(其实并不是全部,只是一大部分严重警告而已),但是不启用“使用变量...虽然苹果现在用都是LLVM了,但是这部分内容应该是继承了GCC设定。 控制警告,局部加入或关闭 Clang提供了我们自己加入警告或者暂时关闭警告办法。...ignored "-Wunused-variable" int a; #pragma clang diagnostic pop 如果a之后没有被使用,也不会出使用变量警告了。..."clang参数" #pragma clang diagnostic pop 自行Clang使用手册: http://clang.llvm.org/get_started.html #pragma非常复杂需要你编译器底层非常了解

2.2K80

通过编译器预处理指令禁止调用 performSelector:方法

本文希望介绍一个特殊 预处理指令 #pragma clang poison ,该指令可以实现禁止调用 performSelector: 方法诉求 performSelector: `performSelector...:aSelector]; 这种用法同样存在很多风险,比如,可能会出现内存泄露,可能因做好参数校验导致崩溃。...所以,很多 APP 都希望严格控制项目 performSelector: 使用入口,避免随意调用 performSelector: 产生崩溃 #pragma GCC poison `#pragma...GCC poison`[2] 是 GCC 编译器支持一个预处理指令,可以用于移除程序中**identifier(标识符)** 比如,#pragma GCC poison NSLog 可以让源码出现...image-20210221224422395 clang 编译器同样支持这种写法,同时也支持将 GCC 替换成clang 所以,我们可以使用下面的预处理指令 #pragma clang poison

36010
领券