Linux环境下COBOL编译报错原因及解决咨询
问题描述
在VSCode远程窗口创建了testdoc.cob文件,代码内容如下:
identification division. program-id. Assignment1. environment division. configuration section. data division. working-storage section. 01 out pic x(11) value "Hello World". procedure division. display out. goback. end program Assignment1.
保存文件后,在终端确认当前目录为/home/user(包含testdoc.cob),执行cobc -x testdoc.cob编译时,出现如下报错:
user@DESKTOP-57BGLNH:~$ pwd /home/user user@DESKTOP-57BGLNH:~$ ls COBOL testdoc.cob user@DESKTOP-57BGLNH:~$ cobc -x testdoc.cob assignment1.cob:1: error: invalid indicator 'f' at column 7 assignment1.cob:2: error: invalid indicator 'm' at column 7 assignment1.cob:4: error: invalid indicator 'n' at column 7 assignment1.cob:5: error: invalid indicator 'u' at column 7 assignment1.cob:7: error: invalid indicator 'i' at column 7 assignment1.cob:8: error: invalid indicator 'g' at column 7 assignment1.cob:10: error: invalid indicator 'u' at column 7 assignment1.cob:11: error: invalid indicator 'a' at column 7 assignment1.cob:12: error: invalid indicator 'k' at column 7 assignment1.cob:14: warning: line not terminated by a newline [-Wothers] assignment1.cob:14: error: invalid indicator 'r' at column 7 assignment1.cob:9: error: PROGRAM-ID header missing assignment1.cob:9: error: PROCEDURE DIVISION header missing assignment1.cob:9: error: syntax error, unexpected PICTURE user@DESKTOP-57BGLNH:~$
报错信息指向assignment1.cob,但并未编译该文件,更换文件夹、修改扩展名后问题依旧,请问报错原因是什么?哪里操作出错了?
报错原因及解决方法
核心原因
这是COBOL的传统格式规范导致的:
- 传统COBOL代码要求第1-6列为序列区(可留空或填写行号),第7列为续行标记位(仅允许-、+等特定字符作为续行符号),真正的代码内容必须从第8列开始编写。
- 当前代码直接从第1列开始写,编译器会把每一行第7列的字符误判为续行标记,而这些字符不是合法的续行符号,因此触发报错。
- 报错中出现
assignment1.cob是因为cobc编译器会自动以代码中PROGRAM-ID指定的名称(Assignment1)生成中间编译文件,并非手动创建的文件。
修正方案
调整代码格式,确保所有代码行从第8列开始(即每一行前预留7个空格),修正后的代码如下:
identification division. program-id. Assignment1. environment division. configuration section. data division. working-storage section. 01 out pic x(11) value "Hello World". procedure division. display out. goback. end program Assignment1.
操作步骤
- 按照上述格式修改
testdoc.cob文件 - 重新执行编译命令
cobc -x testdoc.cob即可正常编译
内容的提问来源于stack exchange,提问作者Steve X
相关产品推荐
相关产品推荐

