当前位置:首页 » 编程软件 » 编译器语法对比

编译器语法对比

发布时间: 2022-05-08 06:18:10

‘壹’ c++编程的文本编辑器和编译器有什么区别

编译器是把你的代码(高级语言)解释为CPU指令的一种程序。
你说的这个文本编辑器应该是开发环境,编辑器就是帮助你写出正确语法的代码、设置工程属性的一个环境。

‘贰’ c语言的编译器为什么有许多不同的版本并且在不同的编译器版本下C语言的语法规则也不尽相同

新的版本都是基于旧的版本升级过来的,以此来改善编译器的性能、增加对新平台的支持以及提高竞争能力。

不同的编译器支持的标准语法是一致的(不然没资格称C编译器),但是每个编译器自身可以添加额外的语法、库来扩展语言的表达能力,这就是所谓的xx编译器扩展。使用语言扩展通常能获得较高的性能和灵活性,但是损失了跨平台性。

不仅仅是编译器有很多版本,语言本身都有很多版本,目前C语言的版本是C11,下一个版本为C1y。

‘叁’ C语言的编译器为什么有许多不同的版本并且在不同的编译器版本下C语言的语法规则也不尽相同

C的标准本来就有多个版本,目前编译器采用的标准比较常见的是ANSI C和C99。另外语言标准中也存在未定义行为,留给编译器实现自己去定义。各种编译器对标准的实现也未必完全遵守(C还好,C++这种特别复杂的语言就很难做到完全遵守标准了),而且往往还增加一些自己的扩展,预定义宏之类的。这些都给跨编译器编码带来麻烦。不过总体而言C是个比较单纯的语言,除非程序员故意,一般搞不出太多给编译器出难题的花样。作为长期用C++的程序员,非常羡慕C代码编译时那种飞快的速度。
麻烦采纳,谢谢!

‘肆’ 编译器二:LLVM和GCC的区别

GCC: GNU Compiler Collection
GCC属于传统编译器,传统编译器的工作原理基本上都是三段式的,可以分为前端(Frontend)、优化器(Optimizer)、后端(Backend)。前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(Abstract Syntax Tree)。优化器对这一中间代码进行优化,试图使代码更高效。后端则负责将优化器优化后的中间代码转换为目标机器的代码,这一过程后端会最大化的利用目标机器的特殊指令,以提高代码的性能。
事实上,不光静态语言如此,动态语言也符合上面这个模型,例如Java。Java Virtual Machine也利用上面这个模型,将Java代码翻译为Java bytecode。这一模型的好处是,当我们要支持多种语言时,只需要添加多个前端就可以了。当需要支持多种目标机器时,只需要添加多个后端就可以了。对于中间的优化器,我们可以使用通用的中间代码。
这种三段式的结构还有一个好处,开发前端的人只需要知道如何将源代码转换为优化器能够理解的中间代码就可以了,他不需要知道优化器的工作原理,也不需要了解目标机器的知识。这大大降低了编译器的开发难度,使更多的开发人员可以参与进来。
虽然这种三段式的编译器有很多有点,并且被写到了教科书上,但是在实际中这一结构却从来没有被完美实现过。做的比较好的应该属Java和.NET虚拟机。虚拟机可以将目标语言翻译为bytecode,所以理论上讲我们可以将任何语言翻译为bytecode,然后输入虚拟机中运行。但是这一动态语言的模型并不太适合C语言,所以硬将C语言翻译为bytecode并实现垃圾回收机制的效率是非常低的。
GCC也将三段式做的比较好,并且实现了很多前端,支持了很多语言。但是上述这些编译器的致命缺陷是,他们是一个完整的可执行文件,没有给其它语言的开发者提供代码重用的接口。即使GCC是开源的,但是源代码重用的难度也比较大。
LLVM: Low Level Virtual Machine
LLVM最初是[Low Level Virtual Machine]的缩写,定位是一个虚拟机,但是是比较底层的虚拟机。它的出现正是为了解决编译器代码重用的问题,LLVM一上来就站在比较高的角度,制定了LLVM IR这一中间代码表示语言。LLVM IR充分考虑了各种应用场景,例如在IDE中调用LLVM进行实时的代码语法检查,对静态语言、动态语言的编译、优化等。
LLVM与GCC在三段式架构上并没有本质区别。LLVM与其它编译器最大的差别是,它不仅仅是Compiler Collection,也是Libraries Collection。举个例子,假如说我要写一个XYZ语言的优化器,我自己实现了PassXYZ算法,用以处理XYZ语言与其它语言差别最大的地方。而LLVM优化器提供的PassA和PassB算法则提供了XYZ语言与其它语言共性的优化算法。那么我可以选择XYZ优化器在链接的时候把LLVM提供的算法链接进来。LLVM不仅仅是编译器,也是一个SDK。

‘伍’ C++编译器哪个比较好

编译器有很多,但是比较好用的还是microsoft visual c++ 。

具体如下:

1、简介

Microsoft Visual C++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。

2、特点

它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而着称。比如,它允许用户进行远程调试,单步执行等。

3、编译

允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结着称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显着。

‘陆’ C#与C++的语法差异(以描述C#为主)

  1. c#的主函数:public static void Main(String[] arg)
    c++的主函数:int main( ) 或者int main( int argc, char *argv[] )

    其中arg都是参数,c#在类中定义main函数,所以要用静态的定义。

  2. C#要求所有的运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联。

    c++还可以用友元函数。

  3. c#字符串是String类型的对象,它的值是文本。在内部,文本被存储为Char对象的顺序只读集合。C# 字符串末尾没有以 null 结尾的字符;因此 C# 字符串可以包含任意数目的嵌入式 null 字符(“”)。字符串的Length属性代表它包含的Char对象的数量,而不是 Unicode 字符的数量。

    C++支持两种字符串:C风格字符串和string。之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联。我们尽可以把它看成是C++的基本数据类型。此外,CString类在MFC中广泛应用,简化了字符串的处理。

  4. c++ static静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。
    用法1:函数内部声明的static变量,可作为对象间的一种通信机制
    用法2:局部静态对象
    用法3:静态成员和静态成员函数

    c# static

    1. 用在类里的属性、方法前面,这样的静态属性与方法不需要创建实例就能访问,
    通过类名或对象名都能访问它,静态属性、方法只有“一份”:即如果一个类新建有N个
    对象,这N 个对象只有同一个静态属性与方法
    2. 方法内部的静态变量:
    方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,
    它不是在栈中分配的,是在静态区分析的, 这是与局部变量最大的区别


    c++ extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

    c#extern修饰符用于声明在外部实现的方法。extern修饰符的常见用法是在使用 Interop 服务调入非托管代码时与DllImport特性一起使用。在这种情况下,还必须将方法声明为static

  5. 内部类实例化了,而外部类还未实例化,这样内部类就不能访问外部类的非静态成员了

  6. 不可以,面向对象的方法应该都在类中。不过个人觉着可以用委托来代替这种用法

  7. 应该是MyClass &b=new MyClass()

    C++中支持指针和引用,指针既可以改地址,也可以改指针指向地址的值。而引用则无法修改地址,只能改值,托管c#取消了指针,引用和c++的引用一样,只不过不用加&*->之类的符号了,统统用.来访问

    另外,c++和c#一样结构体是值类型,类是引用类型


    1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。

    2. 值类型存取速度快,引用类型存取速度慢。

    3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

    4. 值类型继承自System.ValueType,引用类型继承自System.Object

    5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放

    6. 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
    7.值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。

‘柒’ C编译器问题。不同编译器中编写C/C++程序语法是否有不同

for(int i=0;i<10;++i) cout<<i;
cout<<i;

Dev-c++里,是错的。i的作用域只是for

vc6.0里是对的。

这只是c++的写法。c里变量声明必须放在前面,不会有这种情况。

其他的没用过。

‘捌’ C++初探:c和c++的区别简述,以及编译器对代

目前最着名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门十分优秀而又重要的语言。
c语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。
从市面上有关c语言的书籍和高等院校采用的教材来看,它们有一个共性,那就是:脱离了实际应用(全是小打小闹的小例子),纯粹的过程性程序设计,没有软件工程思想的体现,没有一定程序设计风格,仅仅是为了让大家明白什么是c语言而已。
高等院校开设c语言程序设计的目的是让学生对程序设计有个入门,有个直观的理解,同时为其他后续课程作铺垫。
C++:
C++语言是在C语言的基础是扩展而成的.所以两种语言的基本语法和语义是相同。C++中加入了面向对程序设计(OOP)的特征。
下面的三个主要性质刻划OOP语言的特点:
封装性:把一个数据结构同操作的函数(行为或方法)组合在一起。封装性是借助于一种新的结构和数据类型机制——类实现的。
继承性:建立一个新的派生类,它从一个或多个先前定义的基类中继承函数和数据,而且可能重新定义或加进新的数据行为,这样就建立了类的层次。
多态性:给行为取一个名字或符号,它共享一个类的层次,在这个层次中的每个类都以适合自己的方式实现这个行为。
C#:
C#(读做 "C sharp",中文译音“夏普”)是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角.
Java:
Java是一种可以编写跨平台应用软件的面向对象的程序设计语言,由升阳(太阳微电子,Sun Microsystems)公司的James Gosling等人于1990年代初开发的.具有以下特征的高级程序语言:
简单 面向对象 可分布 可解释 强壮 安全性 结构化 轻便 功能强大 多线程 动态...
Java既可以被编译,也可以被解释。通过编译器,可以把Java 程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器 解释的独立于平台的代码。通过解释器,每条Java字节指令被 分析,然后在计算机上运行。只需编译一次,程序运行时解释 执行。

热点内容
curl静态编译 发布:2025-05-14 04:09:52 浏览:159
压缩久期 发布:2025-05-14 04:08:46 浏览:941
sql置疑 发布:2025-05-14 04:07:09 浏览:441
java面试的算法题 发布:2025-05-14 04:06:18 浏览:467
交叉编译优化 发布:2025-05-14 03:48:52 浏览:532
动图在线压缩 发布:2025-05-14 03:35:24 浏览:133
w7共享无法访问 发布:2025-05-14 03:35:24 浏览:483
为什么微信会出现账号密码错误 发布:2025-05-14 03:03:30 浏览:693
幻影脚本官网 发布:2025-05-14 03:01:13 浏览:827
servlet的webxml怎么配置 发布:2025-05-14 02:51:46 浏览:773