clang

在哪里可以找到最新的C或C ++标准文档?

依然范特西╮ 提交于 2020-02-26 00:42:54
对于许多问题,答案似乎可以在“标准”中找到。 但是,我们在哪里找到呢? 最好在线。 有时,谷歌搜索有时会感到徒劳,尤其是对于C标准,因为它们淹没在编程论坛上的讨论中。 首先,由于这些是我现在正在搜索的内容,因此在哪里有不错的在线资源: C89 C99 C11 C ++ 98 C ++ 03 C ++ 11 C ++ 14 #1楼 草案链接: C ++ 11(+版本修复):N3337 HTML , PDF C ++ 14(+版本修复):N4140 HTML , PDF C11 N1570 ( 文字 ) C99 N1256 在批准和发布之前,将标准 草案 分发以征求意见。 请注意 ,工作草案不是当前有效的标准,也不完全是已发布的标准 #2楼 可以在线 获得ANSI C标准草案 (又名C.89)的文本。 尽管在内容上(假设为),但在ISO C标准(C.90)接受之前,这已由ANSI委员会标准化,因此各节的编号不同(ANSI第2至4节大致对应于ISO第5至7节)。大致相同)。 #3楼 http://c0x.coding-guidelines.com/ 包含C标准的基于HTML的可搜索版本。 实际上,是一个稍微修改的版本: 该网站包含N1256的修改版本。 它包括已从C99中删除的措辞(即以删除线的形式)和曾经出现在C99中的措辞(即以下划线的形式)。 #4楼 尽管不是实际标准,但对ISO

AddressSanitizer blacklist in c++ not working

允我心安 提交于 2020-02-24 09:10:08
问题 I'm trying to get address sanitizer blacklist working in a C++ project but its not working as expected. I tried the example on their website, if I compile with clang , it works fine. build % cat suppress.txt fun:bad_foo build % cat foo.c #include <stdlib.h> void bad_foo() { int *a = (int*)malloc(40); a[10] = 1; } int main() { bad_foo(); } build % clang -fsanitize=address -fsanitize-blacklist=suppress.txt foo.c ; ./a.out Exit code: 0 But as soon as I use clang++ , its ignored. build % cp foo.c

LLVM与Clang

╄→尐↘猪︶ㄣ 提交于 2020-02-21 10:31:40
随着 Android P 的逐步应用,越来越多的客户要求编译库时用 libc++ 来代替 libstdc++。libc++ 和 libstdc++ 这两个库有关系呢?它们两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,而 libstdc++ 则是 GCC 的对应 C++ 标准库了。从 Android 市场来说,Android NDK 已在具体应用中放弃了 GCC,全面转向 Clang。 Android NDK 从 r11 开始建议大家切换到 Clang,并且把 GCC 标记为 deprecated,将 GCC 版本锁定在 GCC 4.9 不再更新; Android NDK 从 r13 起,默认使用 Clang 进行编译,但是暂时也没有把 GCC 删掉,Google 会一直等到 libc++ 足够稳定后再删掉 GCC; Android NDK 在 r17 中宣称不再支持 GCC 并在后续的 r18 中删掉 GCC,具体可见 NDK 的版本历史。 接下来,简要的介绍一下 Clang。Clang 是一个 C、C++、Objective-C 和 Objective-C++ 编程语言的编译器前端,采用底层虚拟机(LLVM)作为后端。至于为什么有了 GCC 还要开发 Clang?Clang 相比 GCC 又有什么优势呢?网上有很多信息可以参考

编译安装 LLVM

好久不见. 提交于 2020-02-17 14:01:01
本文记录 LLVM 的安装过程,比较繁琐,使用 LLVM 3.4 操作系统:CentOS 6.6 64 位 1. 下载需要的软件 相关软件下载地址: http://llvm.org/releases/download.html#3.4 我们需要下载代码如下: Clang source code LLVM source code Compiler RT source code 下载之后,分别解压各个压缩包,然后把 clang 放到 llvm 源码的 tools 目录中,并重命名为 clang,把 compiler-rt 放到 llvm 源码中的 projects 目录中,重命名为 compiler-rt: tar -zxf clang-3.4.src.tar.gz tar -zxf compiler-rt-3.4.src.tar.gz tar -zxf llvm-3.4.src.tar.gz mv clang-3.4 llvm-3.4/tools/clang mv compiler-rt-3.4 llvm-3.4/projects/compiler-rt 2. 解决软件依赖 LLVM 3.4 所依赖的各个软件及其版本号如下: Package Version Notes Download Links GNU Make 3.79, 3.79.1 Makefile/build

微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

不羁岁月 提交于 2020-02-13 06:21:40
1、引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了。 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch iMac 编译要接近半小时;偶然间更新完代码,又莫名其妙需要全新编译。在这么低的编译效率下,开发心情受到严重影响。 于是年初我向上头请示,优化微信编译效率,上头也同意了。 2、现有方案 在动手之前,先搜索目前已有方案,大概情况如下。 2.1 优化工程配置 1)将 Debug Information Format 改为 DWARF: Debug 时是不需要生成符号表,可以检查一下子工程(尤其开源库)有没有设置正确。 2)将 Build Active Architecture Only 改为 Yes: Debug 时是不需要生成全架构,可以检查一下子工程(尤其开源库)有没有设置正确。 3)优化头文件搜索路径: 避免工程 Header Search Paths 设置了路径递归引用: Xcode 编译源文件时,会根据 Header Search Paths 自动添加 -I 参数,如果递归引用的路径下子目录越多,-I 参数也越多,编译器预处理头文件效率就越低,所以不能简单的设置路径递归引用。同样 Framework Search Paths 也类似处理。 2.2 使用 CocoaPods 管理第三方库 这是业界常用的做法

Objective C内存管理进阶(三): 调试内存泄露

a 夏天 提交于 2020-02-12 23:26:22
1)内存的问题是发现越早,解决的代价就越小。所以最重要的是理解Objective C内存管理,遵循我之前提到的实践准则和编码规范。另外,在每个迭代周期要做一些压力和内存测试,尽早发现问题。 2)利用Clang静态检测工具。在XCode 3.2之后的版本里,Clang已经被集成进来。Build ->Build & Analyze即可运行,它可以发现大部分因为疏忽造成的内存泄露。比如有Alloc没有release等。下图是一次静态检测的结果. 如图所示,Clang清楚的告诉你在145行有潜在的内存泄露,即label有alloc没有release。 图一 Clang静态检测 3) 如果静态检测工具不能解决问题,就需要更多的分析和借助instruments工具。 a)首先要重现问题,找到是哪些操作容易产生内存泄露。主要通过一些测试和推理来判断,比如找出哪些操作重复进行时,内存增长比较明显或者会Crash。 b)借助instruments工具。instruments是在程序运行时在程序中注入一些代码来动态的检测内存分配状况和泄露问题。Run -> Run with perfomance tools - > leaks 即可启动。下图是运行leak instrument的一次结果,如果leak是你的代码引起的,你还可以直接查看到引起泄露的代码。 图二 leaked Blocks 图三

Ubuntu安装后要做的事

血红的双手。 提交于 2020-02-09 02:05:35
1.sudo apt-get update && sudo apt-get upgrade 2.设置root的密码 sudo passwd root 3.修改更新源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 源setting change to 163 4.安装语言包 sudo apt-get install language-pack-zh-hans language-pack-zh-hant 5.修改系统时间 apt-get install -y ntpdate ntpdate -u pool.ntp.org date 6.IBus IBus拼音:sudo apt-get install ibus-pinyin IBUS五笔:sudo apt-get install ibus-table-wubi 谷歌拼音输入法:sudo apt-get install ibus-googlepinyin Sun拼音输入法:sudo apt-get install ibus-sunpinyin 7.gedit中文乱码: sudo gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030', 'GB2312', 'GBK',

clang: export symbols of implicitly instantiated functions with O3

假装没事ソ 提交于 2020-02-06 05:08:05
问题 TL,DR: How can I force clang to export the symbols of implicitly instantiated functions even when -O3 is active? Let's take the following code: #include <iostream> #include <llvm/Support/DynamicLibrary.h> #include <llvm/ExecutionEngine/ExecutionEngine.h> #include <llvm/ExecutionEngine/RTDyldMemoryManager.h> template <typename T> __attribute__((noinline)) int twice(const T& t) { return t * 2; } int thrice(const int& t) { return t * 3; } int main() { std::cout << twice(5) << std::endl; std:

Block 实现 浅析

偶尔善良 提交于 2020-02-05 23:34:52
前言 这里 有关于 block 的 5 道测试题,建议你阅读本文之前先做一下测试。 先介绍一下什么是闭包。在 wikipedia 上, 闭包的定义 ) 是: In programming languages, a closure is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables or upvalues) of that function. 翻译过来,闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。 block 实际上就是 Objective-C 语言对于闭包的实现。 block 配合上 dispatch_queue,可以方便地实现简单的多线程编程和异步编程,关于这个,我之前写过一篇文章介绍: 《使用 GCD》 。 本文主要介绍 Objective-C 语言的 block 在编译器中的实现方式。主要包括: block 的内部实现数据结构介绍 block 的三种类型及其相关的内存管理方式 block 如何通过 capture

iOS Block详细介绍(block实现)

老子叫甜甜 提交于 2020-02-05 23:20:31
Block的实现 数据结构定义 block的数据结构定义如下图 对应的结构体定义如下: struct Block_descriptor { unsigned long int reserved; unsigned long int size; void (*copy)(void *dst, void *src); void (*dispose)(void *); }; struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...); struct Block_descriptor *descriptor; /* Imported variables. */ }; 通过改图 我们可以知道 一个block实例实际上由6部分组成。 1.isa指针。所有对象都有该指针,用于实现对象相关的功能。 2.flags 用于按bit位表示一些block的附加信息。本文后面介绍 block copy 的实现代码可以看到对该变量的使用。 3.reserved 保留变量 4.invoke 函数指针 指向具体的block实现的函数调用地址 5.descriptor 表示该block的附加描述信息 主要是size 大小 以及 copy 和 dispose函数的指针 6.variables capture