当前位置:首页 » 编程软件 » 基于llvm编译器的编程语言

基于llvm编译器的编程语言

发布时间: 2024-03-19 08:11:21

c语言是用什么语言编写的汇编吗

C语言源中信悉自Ken Thompson发明的B语言,而 B语言则源自BCPL语言坦卖。

1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。


(1)基于llvm编译器的编程语言扩展阅读

C语言编译器:

GCC,GNU组织开发的开源免费的卖乎编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

Visual C++:: cl.exe,Microsoft VC++自带的编译器

C语言集成开发环境:

Code::Blocks,开源免费的C/C++ IDE

CodeLite,开源、跨平台的C/C++集成开发环境

Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

❷ 适合win10系统的c语言编译器

桌面操作系统

对于当前主流桌面操作系统而言,可使用 VisualC++、GCC以及 LLVM Clang 这三大编译器。

Visual C++(简称 MSVC)只能用于 Windows 操作系统;GCC 和 LLVM Clang除了可用于Windows操作系统之外,主要用于 Unix/linux操作系统。

像现在很多版本的 Linux 都默认使用 GCC 作为C语言编译器,而像 FreeBSD、macOS 等系统默认使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS中,Clang 编译器又被称为 Apple LLVM 编译器。

MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visual Studio Community 版本来免费使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。

而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。

MSVC 编译器对 C99 标准的支持就十分有限,加之它压根不支持任何 C11 标准,所以本教程中设计 C11 的代码例子不会针对 MSVC 进行描述。所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGen,当前版本基于的是 Clang 3.8。

也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码则与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节,所以各位使用的时候也需要注意。

为了方便描述,本教程后面涉及 Visual Studio 集成开发环境下的 Clang 编译器简称为 VS-Clang 编译器。

嵌入式系统

而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:

  • 用于 Keil 公司 51 系列单片机的 Keil C51 编译器;

  • 当前大红大紫的 Arino 板搭载的开发套件,可用针对 AVR 微控制器的 AVRGCC 编译器;

  • ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;

  • DSP 设计商 TI(Texas Instruments)的 CCS(Code Composer Studio);

  • DSP 设计商 ADI(Analog Devices,Inc.)的 Visual DSP++ 编译器,等等。


  • 通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。


  • 不过 Arino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arino 所采用的C编译器是基于 GCC 的。


  • 还有像树莓派(Raspberry Pi)这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson TK 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson TK 都默认安装了 Linux 操作系统。


  • 在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。


  • 而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。


  • 下图展示了上述C语言编译器的分类。


❸ 如何利用LLVM写一个编译器

LLVM有自己的教程,如果你只想做个玩具,那可以首先试着实现LLVM Tutorial: Table of Contents的Kaleidoscope。深入的,请看他的文档http://llvm.org/docs/

Kaleidoscope是一个范式简单的脚本语言,教程里的词法,语法分析都是手写的,基本流程就是词法语法解析,利用LLVM的API生成中间代码并执行。

我用visual studio编译的LLVM(version 3.6)实现过Kaleidoscope,我遇到的坑不少,如果你想以visual studio编译的LLVM实现Kaleidoscope,你可能同样会遇到

1. LLVM的生成目标对象为ELF格式,在windows下使用JIT的API时会出现incompatible object format的错误警告,需要在通过重新设定Mole的triple,我的PC的getTargetTriple的结果是“i686-pc-windows-msvc”,直接在后面再加上“-elf”即可

TheMole->setTargetTriple("i686-pc-windows-msvc-elf");

2. LLVM不支持windows下通过动态链接导出函数,如果需要使用C/C++的函数,需要通过addSymbol进行注册

llvm::sys::DynamicLibrary::AddSymbol(/*std::string("_") +*/ "printd", &printd);

3. Kaleidoscope里使用的JIT的查找函数的API,getPointerToFunction已经被弃用了,需要替换为getFunctionAddress

❹ c语言的编程开发

GCC,GNU组织开发的开源免费的编译器
MinGW,Windows操作系统下的GCC
Clang,开源的BSD协议的基于LLVM的编译器
Visual C++ :: cl.exe,Microsoft VC++自带的编译器 CodeBlocks,开源免费的C/C++ IDE
CodeLite,开源、跨平台的C/C++集成开发环境
Orwell Dev-C++,可移植的C/C++IDE
C-Free
Light Table
Visual Stdio系列 起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C。
K&R C主要介绍了以下特色:
结构体(struct)类型
长整数(long int)类型
无符号整数(unsigned int)类型
把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = -10还是i =- 10,使得处理上产生混淆。
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最 准要求,许多老旧的编译器仍然运行K&R C的标准。 1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。
1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 Programming Language C。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。
1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C 。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。
1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC 9899:1990/Cor 1:1994 ,有些人简称为C94标准。
1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity ,有些人简称为C95标准。 1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C ,简称C99标准。这是C语言的第二个官方标准。
在C99中包括的特性有: 增加了对编译器的限制,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节(extern 要求支持到 31)。 增强了预处理功能。例如: 宏支持取可变参数 #define Macro(...) __VA_ARGS__ 使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。 支持 // 开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了) 增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool 支持 long long, long double _Complex, float _Complex 等类型 支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。声明时使用 int a[var] 的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct 与 union 里。 变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for 语句块内部有效。 允许采用(type_name){xx,xx,xx} 类似于 C++ 的构造函数的形式构造匿名的结构体。 复合字面量:初始化结构的时候允许对特定的元素赋值,形式为:
struct test{int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 }; struct test{int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5 }; // 3,4 是对 .c,.d 赋值的 格式化字符串中,利用 u 支持 unicode 的字符。 支持 16 进制的浮点数的描述。 printf scanf 的格式化串增加了对 long long int 类型的支持。 浮点数的内部数据描述支持了新标准,可以使用 #pragma 编译器指令指定。 除了已有的 __line__ __file__ 以外,增加了 __func__ 得到当前的函数名。 允许编译器化简非常数的表达式。 修改了 /% 处理负数时的定义,这样可以给出明确的结果,例如在C89中-22 / 7 = -3, -22% 7 = -1,也可以-22 / 7= -4, -22% 7 = 6。 而C99中明确为 -22 / 7 = -3, -22% 7 = -1,只有一种结果。 取消了函数返回类型默认为 int 的规定。 允许 struct 定义的最后一个数组不指定其长度,写做 [](flexible array member)。 const const int i 将被当作 const int i 处理。 增加和修改了一些标准头文件,比如定义 bool 的 <stdbool.h> ,定义一些标准长度的 int 的 <inttypes.h> ,定义复数的 <complex.h> ,定义宽字符的 <wctype.h> ,类似于泛型的数学函数 <tgmath.h>, 浮点数相关的 <fenv.h>。 在<stdarg.h> 增加了 va_ 用于复制 ... 的参数。里增加了 struct tmx ,对 struct tm 做了扩展。 输入输出对宽字符以及长整数等做了相应的支持。 GCC和其它一些商业编译器支持C99的大部分特性。 2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,简称C11标准,原名C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括: 对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及<stdalign.h>头文件。 _Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。 _Generic 关键字。 多线程(Multithreading)支持,包括: _Thread_local存储类型标识符,<threads.h>头文件,里面包含了线程的创建和管理函数。 _Atomic类型修饰符和<stdatomic.h>头文件。 增强的Unicode的支持。基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>. 删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。 增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。 增加了更多浮点处理宏。 匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。 静态断言(static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。 新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。 新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。

❺ c语言如何编程求圆体积和表面积

/*定义浮点型变量*/float r,h,v;/*提示用户输入变量*/printf("请输入圆柱体的半径和高:")

/*输入两个变量*/scanf("%f%f",&r,&h)

/*计算体积*/v=3.14*r*r*h;/*输出体积值*/printf"圆柱体的体积为%f",float r,h,s,v

printf("please in put r and h:");scanf("%f%f",&r,&h);v=f1( r, h);s=f2( r, h);printf("%f,%f",s,v)

(5)基于llvm编译器的编程语言扩展阅读

c语言具体内容:

for循环结构是c语言中最具有特色的循环语句,使用最为灵活方便,它的一般形式为:for(表达式1;表达式2;表达式3)循环体语句 。(其中;不能省略)

表达式1为初值表达式,用于在循环开始前为循环变量赋初值。表达式2是循环控制逻辑表达式,它控制循环执行的条件,决定循环的次数。

表达式3为循环控制变量修改表达式,它使for循环趋向结束。循环体语句是在循环控制条件成立的情况下被反复执行的语句。

但是在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行。

先执行表达式2,然后执行循环结构,最后表达式3,一直这样循环下去。for循环语句是c语言种功能最为强大的语句,甚至在一定程度上可以代替其他的循环语句。

do循环结构,do 1 while⑵;的执行顺序是1->2->1...循环,2为循环条件。while循环结构,while(1) 2; 的执行顺序是1->2->1...循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

❻ c语言编程的平台是什么

c语言编程的平台是:

1、GCC,GNU组织开发的开源免费的编译器;

2、MinGW,Windows操作系统下的GCC;

3、Clang,开源的BSD协议的基于LLVM的编译器;

4、Visual C++ :: cl.exe,Microsoft VC++自带的编译器。

(6)基于llvm编译器的编程语言扩展阅读

选择开发平台注意事项

一、windows

开发环境:visual studio

特点:集成开发环境、简单易用、完整的工具集

缺点:需要授权(也有免费版)体积庞大、无法学习到背后工程代码组织情况、不利于初学者掌握代码编译、链接过程、工程管理

二、unix 或者类unix (包过aix,open solaris ,*bsd, linux)

开发环境:编译工具 gcc、clang ...等等

代码编辑器:vim、emacs等

工程组织:make,CMake

特点:操作系统集成很多工具,所有的工具几乎开源且免费、短小精悍、功能强大

缺点:需要自己动手搭建开发环境、熟悉编译工具、

熟悉编辑器操作、熟悉类unix操作系统的操作。

入门门槛高需要在命令模式下使用脚本、make等工具完成开发工作

热点内容
安卓快手伴侣悬浮怎么设置 发布:2024-11-15 18:26:50 浏览:523
浏览器缓存好的视频为什么都删了 发布:2024-11-15 18:23:06 浏览:160
睡眠缓解压力 发布:2024-11-15 18:20:02 浏览:433
什么是统一存储 发布:2024-11-15 18:19:02 浏览:514
b01智能锁出厂密码是什么 发布:2024-11-15 18:11:01 浏览:677
解压密码提示在哪里 发布:2024-11-15 18:09:31 浏览:598
db2建表空间时怎么配置页大小 发布:2024-11-15 17:58:45 浏览:424
我的世界好玩地铁服务器 发布:2024-11-15 17:48:54 浏览:359
1710小游戏服务器ip 发布:2024-11-15 17:48:01 浏览:663
狂三脚本 发布:2024-11-15 17:31:38 浏览:872