VS Code终端运行COBOL HelloWorld报PROGRAM-ID头缺失错误
GnuCOBOL编译报
PROGRAM-ID header missing排查解决 核心原因
报错本质是编译器没有在代码的正确位置识别到COBOL程序结构头,你现在的问题是完全不符合传统固定格式COBOL的强制列位规则。
GnuCOBOL默认编译老风格固定格式COBOL代码,对每一行的字符列位置有硬要求,错位就不认:
- 第1-6列:序号区,只能留空或者填行号,不能放代码
- 第7列:指示符位,写
*代表整行是注释,写-代表续行,留空才是普通代码行 - 第8-11列:A区,
IDENTIFICATION DIVISION、PROGRAM-ID、ENVIRONMENT DIVISION、PROCEDURE DIVISION这类结构头必须从这个区域起始 - 第12-72列:B区,
DISPLAY、STOP RUN这类可执行语句必须写在这个区域
你贴的代码里,所有DIVISION结构头前面只空了3格,对应字符位置在第4列,直接跑到了序号区,编译器根本识别不出这是程序结构段,扫完整个文件都找不到合法的PROGRAM-ID头,直接抛错。你复制其他示例代码仍报同样错误,基本是粘贴时被VS Code自动调整缩进吞了前置空格,导致列位持续错位。
可直接运行的修正版代码(固定格式)
*hello 注释行,*正好在第7列 IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. PROCEDURE DIVISION. DISPLAY 'HELLO'. STOP RUN.
数一下前置空格:结构头前面空6格,第7格留空,第8格开始写关键字,正好落在A区;DISPLAY这类语句前面空10格,第12格开始写命令,正好落在B区,直接编译就能过。
其他排查点
- 打开VS Code的空格显示开关(编辑器右下角点击空格标识,选择显示空格),不要让自动缩进功能打乱代码前置空格数量,固定格式下差1个空格都可能编译失败。
- 嫌数列位麻烦可以直接用自由格式编译,编译命令加
-free参数即可,自由格式没有强制列位要求,不用刻意数前置空格,编译命令参考:cobc -x -free hello.cbl -o hello.exe - 检查源文件编码,Windows下不要存成UTF-8带BOM格式,选UTF-8无BOM编码即可,文件开头的BOM隐藏字符会被编译器识别为非法内容,也会触发同类报错。
内容的提问来源于stack exchange,提问作者Tal Kessler
相关产品推荐
相关产品推荐

