ABAP 的 include 关键字,Java 的 import, C 的 include 和 C4C ABSL 的 import 比较

ABAP
使用关键字重复引入一个 include program,会报 syntax error:

原因是因为 ABAP 对 include 这个关键字的实现和其他编程语言有点不一样,在激活时简单地把被 include 的 program 的全部源代码替换原程序里 INCLUDE incl 这一行,所以重复引入一个 include program 会报错。

值得一提的是,ABAP report 悄悄得 include 了很多标准的 program,比如<sysini>.

因此如果再次重复引入,同样的会遇到语法错误。

import in Java
Java 的 import 和 ABAP 的 include 关键字实现的效果不一样,在 Java 里使用 import 引入包名可以让程序猿少打些字,比如比较下图第 13 行和第 15 行的写法,明显前者要简洁一些。

因为 import 引入的是包名而不会像 ABAP 那样将包的源代码引入到使用了 import 的源程序,因此可以重复 import。只是将 Java 编译器生成的.class 反编译之后,会发现编译器自动将冗余的 import 移除,且自动引入了新的包 java.io.printStream:

include in C
谭浩强老师的《C 程序设计》一书中提到,编译器预处理时,要对 #include 命令进行"文件包含处理":将被 include 的头文件的全部内容复制到 #include 处。
那么 C 语言的 include 类似 ABAP 的关键字 include。
例子:a.c 里 include 标准的<stdio.h>:

这个头文件的位置: /usr/include

里面是一些宏定义和函数声明:

b.c 里没有 include 这个头文件:

所以 b.c 编译生成的执行文件尺寸小于 a.c:

import in C4C ABSL
同 Java 的 import,不会对后台生成的 ABAP 代码有任何影响。

要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙":

版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/e355319ba4e5eb220d284779d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论