首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏诸葛青云的专栏

    最好的 Windows C++ 编译器

    在技术不断更迭的软件开发世界中,市场上 C++ 编译器的数量开始持续呈现下降趋势。 而随着新的高级 C++ 标准(C++ 17、C++ 20)、新的指令集扩展、以及代码优化的更高标准的出现,究竟什么样的编译器才算优秀? 以下为译文: 近年来,市场上C++编译器的数量有所下降。 一些不太知名的编译器已经退出市场,甚至一度非常流行的Borland(Embarcadero)C++编译器现在也不再被维护。 随着新的高级C++标准(C++ 17、C++ 20)、新的指令集扩展(如带有数百条新指令的AVX512),以及代码优化的更高标准的出现,编译器的构建变得更加复杂。 我已经测试了不同的C++编译器,并把测试结果列在了我的C++手册中。在代码优化方面,Gcc和Clang编译器显然是最好的。

    4K30发布于 2019-11-07
  • 来自专栏云计算与大数据

    C++| 编译器预定义的宏

    C_SUFFIX__ #define __INT8_FMTd__ "hhd" #define __INT8_FMTi__ "hhi" #define __INT8_MAX__ 127 #define _ _weak __attribute__((objc_gc(weak))) #define __x86_64 1 #define __x86_64__ 1 ➜ ~ clang++ -dM -E -x c+ + /dev/null ➜ ~ clang++ -dM -E -x c++ /dev/null #define _LP64 1 #define __APPLE_CC__ 6000 #define define __weak __attribute__((objc_gc(weak))) #define __x86_64 1 #define __x86_64__ 1 g++ -dM -E -x c+ + /dev/null ➜ ~ g++ -dM -E -x c++ /dev/null #define _LP64 1 #define __APPLE_CC__ 6000 #define __

    2.7K20编辑于 2022-04-18
  • 来自专栏用户9199536的专栏

    C++|编译器|语义分析-符号表

    编译器进入语义分析阶段。 语义分析- 将变量的定义与各个使用联系起来,type check,并且将抽象语法转换为更简单的适合生成机器代码表示。

    1.4K20发布于 2021-11-22
  • 来自专栏用户8057608的专栏

    C++系列:编译器是如何工作的

    由于最近都是在和C++打交道,所以今天和大家讨论讨论编译器C++内部是如何工作的。 1.何为编译器? 源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码( ——来源于维基百科 2.内部实现 我们在写C++代码时,是将c++代码写成文本形式保存在一个后缀名为cpp的文件中。那么计算机是如何识别这些代码的呢? 3.编译器做了啥? 另一个问题来了,在转换成后缀名为obj的文件过程中,编译器到底做了啥? 首先,编译器需要预处理我们的代码,即所有的预处理语句都会被先处理。 C++系列...

    1.8K40发布于 2021-04-14
  • 来自专栏编程语言xuetang

    C++编译器之Eclipse安装配置

    除了CodeBlocks和VS、Clion等等开发工具外,我们开发Java常用的Eclipse也可以来开发C++!! 下面老九君就给大家简单的讲解下如何使用Eclipse的C++集成版来搭建标准的C/C++开发环境,以及打印出“Hello world!”。 首先,我们需要3种“原材料”: 1.Eclipsefor C++,即C++集成版的Eclispe安装包; 2.JRE安装包; 3.MinGW安装包; 是不是看着挺烦人的,居然要下载安装这么多的东西! 32位和64位的均有上传,大家下载时注意版本),如图: 那么,喜欢自己动手,丰衣足食的小伙伴,老九君也来给大家讲解下如何一步步的操作下载安装的: 1.首先,我们需要先去Eclipse的官网下载一个C+ a.选择工程项目的存放空间: b.新建一个C++项目,如图: c.给C++项目取一个名字,在Project type这里可以选择Empty Project(空白项目)或者选择Hello World

    1.7K50发布于 2019-09-20
  • 来自专栏全栈程序员必看

    c++编译器的作用「建议收藏」

    编译器的部分工作是寻找程序代码中的错误。编译器不能查出程序的意义是否正确。 但它能够查出程序形式上的错误。以下是编译器能查出的最普遍的一些错误: (1)语法错误。程序猿犯了c++语言中的语法错误。 C++中每一个数据项都有相关联的类型。 类型错误的一个实例是传递了字符串字面值给应该得到整型參数的函数。 (3)声明错误。 C++程序中使用的每一个名字必须在使用之前声明。没有声明名字一般会导致 错误信息。

    1K10编辑于 2022-07-07
  • 来自专栏锦鲤安全

    如何给VS安装Intel C++编译器

    一、前言 相比于vs默认的编译器,intel c++编译器编译的exe特征更少、报毒更低,在代码层面免杀时在VT上可以很轻松达到0查杀。 很多新手不知道如何安装intel c++编译器,这次借新电脑重装vs的机会演示一遍intel c++编译器的安装。 二、安装 1. 即我不同意收集我的信息,点击install按钮: 这里会有警告,提示安装完成后需要重启,继续点击install安装: 开始安装,等待十几分钟: 点击finish安装完成: 打开vs属性页,可以看到intel C+ +编译器已经有了: 不过以防万一,还是重启一下电脑,完成所有功能的安装。

    3.3K40编辑于 2023-11-20
  • 来自专栏我的技术专栏

    编译器角度看C++复制构造函数

    [C++对象模型]复制构造函数的建构操作 关于复制构造函数的简单介绍,可以看我以前写过的一篇文章C++复制控制之复制构造函数该文章中介绍了复制构造函数的定义、调用时机、也对编译器合成的复制构造函数行为做了简单说明 类的Bitwise copy 语意 《Effective C++》中说到: 如果你自己没声明,编译器就会为它声明一个copy构造函数、一个copy assignment操作符和一个析构函数。 实际上在《深度探索C++对象模型》中对编译器的行为并不是这样描述的。对于默认构造函数与复制构造函数,都需要类满足一定的条件时编译器才会帮你合成。那么需要满足些什么条件呢? 说实话这问题我也很疑惑,查看了许多资料,反复看了《深度探索C++对象模型》后,我最终这样认为:展现了Bitwise copy语意的类编译器不会为它写一个函数实体进行成员的复制。 显然,如果编译器对每个新定义的类对象不能正确地设置好初值,将导致严重的后果。所以编译器需要合成出一个复制构造函数来适当地初始化类对象的vptr。

    1.1K70编辑于 2022-05-06
  • 来自专栏MySQL从删库到跑路

    AIX和Linux C++编译器差别总结

    AIX上使用的是xlc++编译器,Linux上使用的是g++编译器。对C标准中没有严格定义的行为,两个编译器的处理方式不一定相同,会造成一些bug。 问题集中在以下几个方面 BUG类型示例xlc++编译器g++编译器处理方法s=”12” sprintf( r,"%04s",s );s不足四位左侧补’0’ r=”0012”s不足四位左侧补’ ‘ r= 需要注意的地方如下表格: 变量类型32位64位BUG类型及处理long4字节8字节代码中一些memcpy和strncpy的第三个参数为sizeof(指针),迁移后造成复制内存长度变化(4变为8)结果异常 指针4字节8字节

    3.4K40发布于 2020-07-23
  • 来自专栏Android 开发者

    Kotlin Vocabulary | 枚举和 R8 编译器

    我会讨论一些和 when 语句相关的潜在开销,以及 Android R8 编译器是如何优化您的应用并减少这些开销的。 编译器 首先,我们讲一讲 D8 和 R8。 事实上,有三个编译器参与了 Android 应用中 Kotlin 代码的编译。 1. Kotlin 编译器 Kotlin 编译器将会首先运行,它会把您写的代码转换为 Java 字节码。 D8 D8 是整个链条中的第二个编译器,它把 Java 字节码转换为 DEX 代码。到了这一步,您已经有了能够运行在 Android 中的代码。不过,您也可以选择继续使用第三个编译器 —— R8。 幸运的是,我们可以做一些事情来减少开销: 这就是 R8 发挥作用的时候了。 使用 R8 来解决问题 R8 是一个有趣的优化器,它能 "看" 到与应用相关的所有内容。 /studio/buil… Jake Wharton 的博客,详细介绍了 D8 和 R8 的工作原理,并为各种功能提供了示例,以及如何直接运行编译器、如何获得反编译的结果等 jakewharton.com

    1.3K50发布于 2020-05-08
  • 来自专栏程序人生丶

    C++ 编译器和链接器的完全指南

    C++是一种强类型语言,它的编译和链接是程序开发过程中不可或缺的两个环节。编译器和链接器是两个非常重要的概念。本文将详细介绍C++中的编译器和链接器以及它们的工作原理和使用方法。 编译器 编译器是将源代码转换为可执行文件的程序。在C++中,常用的编译器有GCC和Clang。编译器的主要工作是将源代码翻译成汇编代码,然后再将汇编代码转换成机器码。 编译器还可以进行优化,使得程序的执行效率更高。 在使用编译器时,我们通常需要指定编译器的选项。 因此,我们应该开启编译器的警告信息以及调试信息,以便在开发过程中及时发现和解决问题。 链接器 链接器是将多个目标文件合并成一个可执行文件的程序。在C++中,常用的链接器有GCC和ld。 这些选项可以控制编译器和链接器的优化等级、调试信息、符号表和库文件搜索路径等等。 总结 编译器和链接器是C++编程中不可或缺的工具。

    1.3K20编辑于 2023-12-03
  • 来自专栏along的开发之旅

    ndk C++ 编译器的函数名修饰规则

    编译器c++编译器对函数名的解释不一样(c++编译器解释函数名的时候要考虑函数参数,这样是了方便函数重载,而在c语言中不存在函数重载的问题),使用extern "C",实质就是告诉c++编译器,该函数是 一个采用C语言编译的库应该考虑到使用这个库的程序可能是C++程序(使用C++编译器),所以在设计头文件时应该注意这一点。 其实,VC的编译器会根据源文件的扩展名选择编译方式,如果文件的扩展名是“.C”,编译器会采用C的语法编译,如果扩展名是 “.cpp”,编译器会使用C++的语法编译程序,所以,最好的方法就是使用extern 在Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有WINAPI和CALLBACK。 ,ebp // 恢复esp pop ebp ret 8 而在编译时,这个函数的名字被翻译成_function@8 注意不同编译器会插入自己的汇编代码以提供编译的通用性,但是大体代码如此

    2.5K31发布于 2019-08-29
  • 来自专栏全栈程序员必看

    pycharm如何编译程序_xc8编译器

    这是 PyCharm 的下载地址:http://www.jetbrains.com/pycharm/download/#section=windows

    1.1K10编辑于 2022-09-27
  • 来自专栏Android 开发者

    R8 编译器: 为 Kotlin 库和应用 瘦身

    不过这些信息还不足以告诉 Kotlin 编译器这些方法需要作为扩展函数在 Kotlin 代码中调用。所以,Kotlin 编译器还在类文件中增加了 kotlin.Metadata 注解。 因此,R8 会从下面两个选项中择其一: 去除元数据 保留原始的元数据 但是这两个选项都不可取。 如果去除元数据,Kotlin 编译器就再也无法正确识别扩展函数。 比如在我们的例子中,当编译类似 D8CommandBuilder().setMinApi(12) 这样的代码时,编译器就会报错,提示不存在该方法。 如果我们保留原始的 Kotlin 元数据,Kotlin 编译器会在元数据中寻找 D8CommandBuilder 的超类。 我们可以在保留规则中使用 allowobfuscation 修饰符来允许 R8 重命名类,生成 Kotlin 元数据,这样 Kotlin 编译器和 Android Studio 都会将该类视为 Kotlin

    1.3K30发布于 2020-11-16
  • 来自专栏Android 开发者

    R8 编译器: 为 Kotlin 库和应用 瘦身

    不过这些信息还不足以告诉 Kotlin 编译器这些方法需要作为扩展函数在 Kotlin 代码中调用。所以,Kotlin 编译器还在类文件中增加了 kotlin.Metadata 注解。 因此,R8 会从下面两个选项中择其一: 去除元数据 保留原始的元数据 但是这两个选项都不可取。 如果去除元数据,Kotlin 编译器就再也无法正确识别扩展函数。 比如在我们的例子中,当编译类似 D8CommandBuilder().setMinApi(12) 这样的代码时,编译器就会报错,提示不存在该方法。 如果我们保留原始的 Kotlin 元数据,Kotlin 编译器会在元数据中寻找 D8CommandBuilder 的超类。 我们可以在保留规则中使用 allowobfuscation 修饰符来允许 R8 重命名类,生成 Kotlin 元数据,这样 Kotlin 编译器和 Android Studio 都会将该类视为 Kotlin

    1.3K20编辑于 2022-09-23
  • 来自专栏《C++与 AI:个人经验分享合集》

    C++编译器插件:自动优化代码性能的新利器》

    本文将探讨在 C++中如何实现一个可以自动优化代码性能的编译器插件。 一、引言 C++作为一种高效的编程语言,被广泛应用于各种高性能计算和系统编程领域。 然而,要充分发挥 C++的性能优势,需要开发者具备丰富的编程经验和深入的编译器知识。手动进行性能优化不仅需要花费大量的时间和精力,而且容易出现错误和遗漏。 (二)编程语言知识 熟悉 C++编程语言的语法和语义是实现编译器插件的前提。编译器插件需要对 C++代码进行分析和修改,因此需要了解 C++的各种语言特性和编程技巧。 (二)集成测试 将编译器插件与编译器集成在一起,进行集成测试。集成测试可以使用一些简单的 C++程序,测试插件在不同的编译选项下的性能表现。 希望本文对大家在 C++中实现编译器插件有所帮助。

    59110编辑于 2024-12-09
  • Borland C++ 3.1:早期编译器的技术探索与影响

    Borland C++ 3.1:早期编译器的技术探索与影响一、背景介绍Borland C++ 3.1 发布于 1992 年,是 Borland 公司推出的 16 位 DOS 编译器,在当时的 PC 开发环境中非常流行 它继承了 Borland Turbo C 的易用性,同时在 C++ 支持、类库和工具链 上做了大量优化。二、技术特点1. 编译器架构16 位编译器,生成小型、快速的 DOS 可执行文件。 培养 C++ 开发人才由于 Borland C++ 3.1 易学且功能完整,它成为了 C++ 教学和入门的首选编译器。许多早期 Windows 软件工程师都是从这个版本开始接触 C++ 开发的。3. 对后续编译器的启发Borland 的 IDE 集成、类库和预编译头文件 思路,被后续的 Turbo C++、Borland C++ Builder 和 Visual C++ 借鉴。 四、历史意义Borland C++ 3.1 是 16 位 DOS 编译器的巅峰之作,同时也是早期 C++ 应用开发的里程碑。

    31010编辑于 2025-08-19
  • 来自专栏程序员

    从汇编角度看C++优化:编译器真正做了什么

    我们写的C++代码,对人类来说是清晰的逻辑表达,但对机器来说,只是一串抽象的字符。编译器,特别是像GCC、Clang这样的现代编译器,扮演着“翻译官”兼“优化大师”的角色。 实战:窥探编译器优化现场让我们通过几个简单的C++例子,并使用-O2优化等级,来看看编译器的魔法。 ,节选):收起代码语言:TXTAI代码解释movDWORDPTR[rbp-4],10;在栈上存储10->amovDWORDPTR[rbp-8],20;在栈上存储20->bmoveax,DWORDPTR[ rbp-4];从内存加载a到eax寄存器addeax,DWORDPTR[rbp-8];从内存加载b并加到eaxmovDWORDPTR[rbp-12],eax;将结果存到栈上cmoveax,DWORDPTR 通过汇编这面镜子,我们得以窥见编译器内部的精妙世界。它不再是神秘的黑盒,而是一个强大且勤奋的合作伙伴。理解它的工作方式,能让我们成为更好的C++程序员,写出既优雅又高效的代码。

    26400编辑于 2025-10-02
  • 来自专栏海天一树

    小朋友学C语言(2):安装Dev C++编译器

    (一)编译器 编译器是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。 (二)C语言编译器 Windows上的C编译器有Turbo C,VC 6.0,Visual Studio, Dev C++等。 Turbo C界面看起来不那么舒服。 所以,Win系统下推荐安装Dev C++。 苹果电脑的Mac系统下,直接用标配的Xcode编译器就行。Xcode可以用来编写C, C++, Objective-C和Swift。 7 勾选按默认,点击“Finish”即运行Dev C++编译器 ? 8 Next ? 9 页面风格按默认,Next ? 10 OK ? 11 Dev C++成功启动 ? 0.653秒是编译器计算出来的处理器运行这个程序所耗的时间。 ? 8 进入D:\Cproject ?

    3.2K70发布于 2018-04-17
  • 来自专栏向治洪

    Android D8,下一代 dex 编译器

    Google 在刚刚发布的 Android Studio 3.1 新版本中,将 D8 作为新版本开发工具默认的 Dex 编译器。那么什么是 D8 呢,D8 与之前的 Dex 打包器有何区别呢? Google 一直在致力于提升 Dex 文件的编译和运行优化工作,并开发出称之为下一代 dex 编译器:D8。其实早在 AS 3.0 Beta 版本中,Google 已经引入 D8 的测试使用。 直到当前 3.1 新版本的发布,才正式将其作为默认 Dex 编译器。 根据官方介绍,新版 D8 Dex 编译器相比之前称之为 DX 的旧版编译器,在 dex 文件的编译和使用上,至少具备这么三个优势: 1,更快的编译速度; 2,更小的文件大小; 3,更优的运行性能 如果你使用的 Android Studio 还是 3.0 版本,可以在项目的 gradle.properties 文件手动开启 D8 编译器

    94030编辑于 2022-11-30
领券