返回首页

COBOL 基础入门

COBOL 基础入门

本教程基于 GnuCOBOL(OpenCOBOL 的延续),结合 hello.cob 与 snake.cob 实例讲解。

目录

  1. 什么是 COBOL
  2. 环境准备
  3. 第一个程序:Hello World
  4. 程序结构:四大部
  5. 源码格式:固定格式 vs 自由格式
  6. 编译与运行

1. 什么是 COBOL

COBOL(COmmon Business Oriented Language,面向商业的通用语言)诞生于 1959 年,是最早的高级编程语言之一。它的设计目标是让业务逻辑像英语一样可读,因此大量使用自然语言关键字。

特点:

  • 面向过程,语法接近英语,可读性极强
  • 强类型、显式声明,所有变量必须在 DATA DIVISION 中定义
  • 主要用于金融、银行、保险、政府等大型机(Mainframe)业务系统
  • 至今全球仍有大量核心业务系统运行在 COBOL 之上

现代实现: GnuCOBOL 是开源的 COBOL 编译器,可将 COBOL 源码编译为 C 代码再编译为本地可执行文件,支持 Linux / Windows / macOS。


2. 环境准备

安装 GnuCOBOL

1
2
3
4
5
6
7
8
# Fedora / RHEL / CentOS
sudo dnf install -y gnucobol

# Debian / Ubuntu
sudo apt install -y gnucobol

# macOS (Homebrew)
brew install gnucobol

验证安装

1
cobc --version

若能看到版本信息,说明安装成功。


3. 第一个程序:Hello World

创建文件 hello.cob:

1
2
3
4
5
6
7
8
9
10
11
12
 IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
AUTHOR. WECODER.
*> OpenCOBOL / GnuCOBOL Hello World 示例程序
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(30) VALUE "Hello, World from COBOL!".
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY WS-MESSAGE.
STOP RUN.

逐行解读:

行 说明
IDENTIFICATION DIVISION. 标识部,程序的”身份证”,声明程序名、作者等
PROGRAM-ID. HELLO-WORLD. 程序名,编译后可执行文件默认以此命名
AUTHOR. WECODER. 作者信息(注释性,不影响运行)
*> 行内注释符号(自由格式)
ENVIRONMENT DIVISION. 环境部,声明运行环境(本例为空)
DATA DIVISION. 数据部,所有变量在此声明
WORKING-STORAGE SECTION. 工作存储节,声明程序内部变量
01 WS-MESSAGE PIC X(30) VALUE "...". 定义一个 30 字符的变量并赋初值
PROCEDURE DIVISION. 过程部,编写实际逻辑
MAIN-PROCEDURE. 段落名(Paragraph),逻辑代码的入口
DISPLAY WS-MESSAGE. 输出变量内容到屏幕
STOP RUN. 结束程序并返回控制权

4. 程序结构:四大部

COBOL 程序由四个部(Division)组成,顺序固定:

1
2
3
4
IDENTIFICATION DIVISION.   ← 标识部(必需)
ENVIRONMENT DIVISION. ← 环境部(可选)
DATA DIVISION. ← 数据部(可选)
PROCEDURE DIVISION. ← 过程部(必需)

4.1 IDENTIFICATION DIVISION(标识部)

程序的元信息,必须是第一个部。

1
2
3
IDENTIFICATION DIVISION.
PROGRAM-ID. SNAKE-GAME.
AUTHOR. WECODER.
  • PROGRAM-ID 是唯一必需的条目
  • 其他如 AUTHOR、DATE-WRITTEN、INSTALLATION 均为文档性条目

4.2 ENVIRONMENT DIVISION(环境部)

声明程序运行所依赖的外部环境,如输入输出设备、文件系统。

1
2
3
4
5
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO "data.txt".
  • CONFIGURATION SECTION:配置节,声明编译器/计算机信息
  • INPUT-OUTPUT SECTION:输入输出节,声明文件与设备的关联

4.3 DATA DIVISION(数据部)

所有数据的声明区,包含多个节:

节 用途
FILE SECTION 文件记录结构
WORKING-STORAGE SECTION 程序内部变量(最常用)
LOCAL-STORAGE SECTION 每次调用重新初始化的局部变量
LINKAGE SECTION 子程序接收的参数

4.4 PROCEDURE DIVISION(过程部)

编写程序逻辑的地方,由若干段落(Paragraph)组成。

1
2
3
4
5
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM INIT-GAME
PERFORM GAME-LOOP UNTIL WS-RUNNING = 0
STOP RUN.

5. 源码格式:固定格式 vs 自由格式

COBOL 有两种源码格式,列位置有严格规定。

固定格式(Fixed Format)

传统格式,本项目 snake.cob 采用此格式:

1
2
3
4
5
6
7
8
列号:  1    6 7                              72
| | | |
| | |--- A 区(Area A):部/节/段落名
| |----- B 区(Area B):语句
|---------- 第 6 列:续行标记
第 1-6 列:序号区(通常留空)
第 7 列:指示符区(* 表示注释行)
第 73 列以后:被忽略

规则:

  • 第 7 列写 * 表示整行注释
  • 部名、节名、段落名从 A 区(第 8 列) 开始
  • 普通语句从 B 区(第 12 列) 开始
  • 代码不能超过第 72 列

自由格式(Free Format)

GnuCOBOL 支持自由格式,无列位置限制,用 >> 指示符:

1
2
3
4
5
6
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello".
STOP RUN.

编译时加 -free 参数,或在源码首行写 >>SOURCE FORMAT FREE。

建议: 学习阶段用自由格式更轻松;维护老代码时需熟悉固定格式。


6. 编译与运行

基本编译

1
2
3
4
5
# 编译为可执行文件(-x 表示生成可执行程序)
cobc -x -o hello hello.cob

# 运行
./hello

常用编译选项

选项 说明
-x 生成可执行文件
-free 使用自由格式源码
-o <file> 指定输出文件名
-c 只编译为目标文件(.o),不链接
-m 编译为可被 CALL 调用的模块(.so)
-Wall 显示所有警告
-std=<标准> 指定 COBOL 标准(如 -std=default)

使用一体化脚本

COBOL 项目通常提供 cobol.sh 一体化脚本:

1
2
3
4
5
./cobol.sh new   hello    # 创建 hello.cob
./cobol.sh build hello # 编译
./cobol.sh run hello # 编译并运行
./cobol.sh list # 列出所有 .cob 文件
./cobol.sh clean # 清理编译产物

下一章: 数据类型与变量