TIOBE 2022年3月的编程语言排行榜显示:
https://www.tiobe.com/tiobe-index/
C 语言和 C++ 分别名列第二和第四位:
而 ABAP 编程语言名列第 42 位:
为什么这篇文章要把 C 语言和 ABAP 放在一起讲,而不是别的编程语言比如 Java 和ABAP 呢?因为 ABAP 语言底层是基于 C/C++ 实现的,包括其关键字(比如最简单的关键字 WRITE 的 C++ 实现有 2 千多行)和虚拟机(ABAP Runtime).
SAP 内部的一群计算机科学家们发明了 ABAP 这门在企业管理软件影响极其深远的编程语言,由它实现的各种 SAP 应用帮助了全球超过 180 个国家和地区的客户们更好地运行其业务。
通过 Google 我们能搜索到一些关于这些 SAP 计算机科学家们的介绍,比如这个链接。
比如像下图这种用 kernel module 修饰的 sc_km_check_feature_2, 以及每一个 ABAP 关键字,其 C 语言的实现代码在 SAP 内部的 Netweaver 系统可以查看到,但是在客户系统上,则是以二进制目标文件的形式存储,无法查看源代码。
本文的目的是希望通过 C 语言和 ABAP 编译过程的一些介绍,加深 ABAP 开发人员们对这门语言的理解。
用 C 语言写个 Hello World 程序,另存为 study.c:
用命令行 gcc ./study.c --verbose
进行编译,参数 verbose 可供我们查看编译明细。上述命令行在我的 Ubuntu 系统上产生一串长长的输出:
我们可以一步步分析。首先用参数 -E 查看预处理生成的目标文件 study.i:
gcc -E study.c -o study.i
可以看到源代码文件只有 78 字节,编译预处理后生成的输出文件有 17116 字节。
为什么膨胀了这么多?原因是因为我源代码文件的第一行,#include
被预处理器替换成了 stdio.h
的实际内容,而 stdio.h
里如果又存在 #include
其他文件的声明,这个替换过程会递归执行。因此直到 study.i
的末尾部分,我们才能看到在 study.c 里书写的源代码部分。
源代码文件 study.c 里的第一行语句 #include
, 请大家记住,后面讲 ABAP还会提到。
用命令行 gcc -S 可以查看 study.c 编译后生成的汇编代码: