天天看点

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

ABAP

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

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

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

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

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

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

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

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

import in Java

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

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

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

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

include in C

谭浩强老师的《C程序设计》一书中提到,编译器预处理时,要对#include命令进行"文件包含处理":将被include的头文件的全部内容复制到#include处。

那么C语言的include类似ABAP的关键字include。

例子:a.c里include标准的:

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

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

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

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

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

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

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

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

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

mport in C4C ABSL

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

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