JAVA C# C/C++之比教学:编译机制

31 篇文章 0 订阅
14 篇文章 1 订阅

(1)预编译指令
C#中也有#define的编译器指令,但是不能用于替换代码中的常数,只能用于条件编译。被条件编译指令跳过的代码在VS中被灰色表示。
define 、undef 、if、elif、else、endif用于条件编译
warning、error用于手动输出警告和错误信息
region endregion用于组成代码块
line用于修改默认的行号
pragma用于抑制警告报告

java中没有预编译指令这回事。一些java扩展的文件如gcc格式支持。

C/C++中除了c#中预编译指令外,还涉及tpyedef。
如果采用ANSI标准C++则可以使用如下预定义好的标准宏名
LINE
FILE
DATE
TIME
STDC
C++中还定义了 __cplusplus
当然如果编译器不是标准的,可能不支持上述编译指令,也有可能预定义了其他宏名。
还有比较复杂的#pragma comment( comment-type [,”commentstring”] )
comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,lib,linker之一。
compiler,是放置编译器的版本或者名字到一个对象文件
lib:例如 #pragma comment(lib, “comctl32.lib”)就相当于Project-Setting-Link里设置lib文件一样。
这样写的好处是用代码代替了设置过程。
还有比较用用的pragma once保证头文件只被编译一次
c++中的标准模板库是通过dll,lib或者是源代码提供的。

(2)编译过程
对java而言,采用javac进行编译,将源程序代码变成字节码.javac属于前端编译器。事实上还有运行期编译器(JIT)和AOT编译器(直接将java代码转换为本地代码)。一个.java文件转化为一个.class文件。如果有内部类的话内部类也会单独生成.class文件。编译规则一般采用IDE提供的。
C/C++就是将.h文件和.c文件组合在一起成为一个编译单元。在linux下面按照makefile进行编译。在VC下编译规则卸载vcxproj文件中。makefile决定了整个文件的编译连接规则。如果不想自己写,可以使用cmake或者qmake。一个高效的makefile应该保证在改动后尽可能少的浪费时间重新编译。
c#所采用的编译器是微软自带的CSC.EXE,它可以将C#中的代码文件和资源文件(JPG,xml)编译为采用IL语言的程序集。微软同时提供NGen.exe用于将IL代码编译为本地代码,进一步加快文件执行的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值