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

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

应该使用尽可能多的编译器,每个编译器对标准的实现略有不同,支持多个编译器将有助于确保实现最可移植、最可靠的代码。...警告有潜在性能问题的强制类型转换 -Wunused 警告任何使用的东西 -Woverloaded-virtual 如果重载(而不是覆盖)虚函数,则发出警告 -Wpedantic 如果使用了非标准的C...通用 一开始就设置非常严格的警告,在项目开始后试图提高警告级别可能会很痛苦。 考虑使用警告视为错误的设置,例如MSVC中的/Wx,以及GCC/Clang中的-Werror。...CMake现在也提供了在正常编译期间调用```clang-tidy```[40]的内置支持。...因此,应该启用所有警告: --enable=all。 备注: 为了正确工作,需要格式完整的头文件路径,所以在使用前不要忘记传递: --check-config。 查找使用的头文件时-j不能大于1。

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

关于-performSelector的使用

在ARC项目中使用 performSelector: 函数出现“performSelector may cause a leak because its selector is unknown”这样的警告...所以平时我们用到的静态选择器就不会出现这个警告。因为在编译期间,这些信息都已经确定。 而使用 performSelector: 时ARC并不知道该方法的返回值是什么,以及该如何处理?该忽略?..." [self performSelector:selector]; //#pragma clang diagnostic pop 可如果多处使用,定义为宏更方便: #define SuppressPerformSelectorLeakWarning...\"") \ code; \ _Pragma("clang diagnostic pop") \ 使用起来就比较简洁了: SuppressPerformSelectorLeakWarning([...[self methodForSelector:selector]; void (*func)(id, SEL) = (void *)imp; func(self, selector); 当有额外参数

1.9K40

Android源码折腾(一)下载和编译

二、编译一、编译步骤# 初始化编译环境( .可以用source代替,如 source build/envsetup.sh ). build/envsetup.sh# 执行lunch# 我这里使用模拟器所以选择.../host/linux-x86/clang-3289846/bin/clang -Iframeworks/rs/script_api/include -Iexternal/clang/lib/Headers...: [options] 与 -source 9 一起设置引导类路径警告: 来自注释处理程序 'com.android.settingslib.search.IndexableProcessor' 的受支持...注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。注: 某些输入文件使用了未经检查或不安全的操作。注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。...2 个警告编译99%的时候,不断的出现上面警告,最终编译失败,个人猜测是和jdk版本有关,一开始我用的是jdk 11版本,之后我换成jdk1.8,最后编译成功。

2.3K40

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

静态分析工具能够在代码运行的情况下分析源代码,发现代码中的bug。在C/C++程序中,静态分析工具可以发现程序错误,如空指针取消引用、内存泄漏、被零除、整数溢出、越界访问、初始化前使用等。...比如,当我们编译代码时,有时候编译器会产生很多烦人的警告。大多数时候,这些警告并不会给程序造成影响。因此,很多人并不会关注这些警告。 不过,我们应该充分信任编译器。...如果我们用Clang编译,又有什么结果呢?...比如空指针,除零,整数溢出,无效的移位操作,无效的转换,STL的无效用法,内存管理,空指针引用,越界检查,初始化的变量,使用或者重复的代码等。...GCC编译代码,并没有报出任何警告和错误。

1.3K30

LLVM(二)——Clang插件

所以,如果路径出现了错误,那么就将llvm重新编译成Xcode项目即可。 接下来我们就使用Xcode来编译Clang。打开上面的这个Xcode工程: ? 注意,这里选择手动管理,不要选择自动创建哈。...// Report函数的第一个参数警告报出的位置,第二个参数警告信息 // getCustomDiagID函数的第一个参数警告级别...这里我使用的是绝对路径,但是当我们真正在项目中去使用的时候,使用相对路径会更好一些。 此时,如果你编译一下,Xcode会报一个警告: ?...这是因为Clang插件需要使用对应的版本去加载,如果版本不一致的话就会导致编译错误,因此我们还需要去进行编译器相关的设置。...以上配置都改完之后,再运行测试工程,没有使用copy修饰的NSString就会报出警告了: ? 以上。

1.5K30

iOS中的预编译指令的初步探究

如果我们在申明这个宏的时候没有指定format参数,而直接使用参数列表,那么在使用中不写参数的NSLog()也将被匹配到这个宏中,导致编译无法通过。...Clang不仅对于明显的错误能够提出警告(比如某方法或者接口实现),也能对很多潜在可能的问题做出提示(比如方法已经废弃或者有问题的转换),而这些问题在很多时候都可能成为潜在的致命错误,必须加以重视。...你可以在其中填写任意多的-W...以开关某些警告,比如,填写为-Wall -Wno-unused-variable即可打开“全部”警告(其实并不是全部,只是一大部分严重警告而已),但是不启用“使用变量...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

【粉丝问答18】linux下查看函数被那些函数调用过?

注: 1、只有使用ELF二进制格式的程序才能获取函数名称和偏移地址。在其他系统,只有16进制的返回地址能被获取。另外,需要传递相应的标志给链接器,以能支持函数名功能即编译选项-rdynamic。...参数:fd:通常填写STDOUT_FILENO 2. 链接库 在编译的时候需要加上**-rdynamic**选项。...gcc编译时加上-rdynamic参数,通知链接器支持函数名功能(不加-rdynamic参数则无函数名打印): gcc 123.c -o run -rdynamic -g 执行结果: ?...头文件 该函数头文件为: #include 使用方式: 直接在想要查看的函数中添加 dump_stack(); 2....结果 可以看到在函数ccc中使用dump_stack()打印出了ccc的函数调用栈。

1.6K20

iOS 编译过程

iOS 编译采用 Clang 作为编译器前端,LLVM 作为编译器后端,编译器前端负责语法分析,语义分析,生成生成中间码 (LLVM IR),在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行...当一个 xcode 工程 build 之后一般会执行如下几个步骤: Clang编译过程 预处理 预处理器会处理源文件中的宏定义,将代码中的宏用其对应定义的具体内容进行替换,删除注释,展开头文件,产生...例如:如果代码中给某个对象发送了一个消息,编译器会检查这个对象是否实现了这个消息(函数、方法)。此外,clang 对整个程序还做了其它更高级的一些分析,以确保程序没有错误。...至于静态类型,是在编译时做检查。当在代码中使用 ARC 时,编译器在编译期间,会做许多的类型检查:因为编译器需要知道哪个对象该如何使用。...静态链接 静态链接:在编译链接期间发挥作用,把目标文件和静态库一起链接形成可执行文件。 动态链接 动态链接:链接过程推迟到运行时再进行。

1.5K20

iOS编译简析

iOS 在 Xcode 5 版本前使用的是 GCC ,在 Xcode 5 中将 GCC 彻底抛弃,替换为了 LLVM ,这期间也是慢慢过渡过来的,由开始使用 GCC 编译->GCC 与 LLVM 共存-...主要子项目: LLVM 核心库 编译器前端 Clang LLDB libc ++和 libc++ lld Clang Clang 是 LLVM 项目的一个子项目,是 C 系列(C、C++、OC)的编译器前端...相对于 GCC,Clang 具有以下优点 编译速度快:在某些平台上,Clang编译速度显著的快过 GCC(Debug 模式下编译 OC 速度比 GGC 快 3 倍) 占用内存小:Clang 生成的...由 Clang 中 Parser 和 Sema 配合完成; 静态分析(Static Analysis):使用它来表示用于分析源代码以便自动发现错误; 中间代码生成(Code Generation):开始...-01,-03,-0s;优化级参数位于参数位于Build Settings -> Apple Clang - Code Generation ->Optimization Level。

1.3K20

关于-#pragma

由于太复杂,在OC中主要在以下几个方面使用到: ---- 用途一:用于标识代码 它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开,如下图所示: ?...用途二:用对OC警告的处理 最全忽略警告的代码 一个忽略整数警号的例子: //#pragma clang diagnostic push //#pragma clang diagnostic ignored...默认用XCode创建一个工程,会自动开启一些重要的warnings,但是更多的时候,我们需要编译器更完整的提醒。 iOS开发采用Clang编译器。...LLVM是一个开源的编译器架构,Clang是LLVM的一个编译器前端。...更多关于 Clang 和 LLVM请点击: iOS——LLVM、Clang浅析 想了解更多关于#pragma请移步到以下文章: #pragma预处理命令 谈谈Objective-C的警告

97810

ubuntu gcc编译时对’xxxx’未定义的引用问题

http://www.cnblogs.com/oloroso/p/4688426.html gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题...lym瞎编,欢迎转载blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso 例如: g++ -o spider -rdynamic...如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件包含。 解决办法 指定原因就好办了,既然知道是缺少了函数的具体实现,那么就给它这个函数的实现就好了。...比如上面的例子,是因为缺失了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr...例如:在main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。gcc main.c -lpthread -o a.out。

7.7K20

AFNetworking源码探究(二)GET请求实现之NSURLSessionDataTask实例化

在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak、循环引用、不能执行之类的警告。 它的作用其实就是忽略一些没用的警告用的,这里就是忽略?...:条件表达式带来的警告,具体的各种编译警告描述,可以参考这篇:各种编译器的警告,具体使用也很简单,先忽略什么样的警告,就从上面的链接中查到,然后放在上面ignored的后面,不要忘记省略号哦~~,例如下边就是忽略废弃方法产生的警告...#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" // 这里写出现警告的代码...#pragma clang diagnostic pop 这样就消除了方法弃用的警告!...:` 创建的请求由一组使用此属性指定的参数序列化的默认标头构造而成。

48150

【C语言】解决C语言报错:Use of Uninitialized Variable

", p.x); // 使用初始化结构体成员 return 0; } 动态分配的内存初始化:使用malloc分配内存后对其进行初始化。...free(ptr); return 0; } 如何检测和调试Use of Uninitialized Variable 使用编译警告选项:在编译时启用编译器的警告选项,可以检测初始化变量的使用...gcc -Wall -Wextra your_program.c -o your_program 使用静态分析工具:静态分析工具(如Clang Static Analyzer)可以帮助检测初始化变量的问题...clang --analyze your_program.c 使用Valgrind工具:Valgrind不仅能检测内存泄漏,还能检测初始化变量的使用。...GCC手册:掌握GCC编译器的高级用法和选项。 Valgrind使用指南:掌握Valgrind的基本用法和内存检测方法。 《The C Programming Language》:由Brian W.

9210
领券