GnuCobol调用含3个参数的C函数时出现编译语法错误
问题解决:GnuCOBOL调用多参数C函数的语法错误
错误原因
你遇到的编译错误源于GnuCOBOL(cobc)的语法规则限制:在CALL USING语句中,BY VALUE/BY REFERENCE这类参数传递修饰符默认仅对紧跟的第一个参数生效,不会自动延续到后续参数。当你在BY VALUE后直接列出多个参数(A B C),解析器处理完A后,遇到B和C时因缺少明确的传递方式声明而触发语法错误。
解决方案
有两种合规写法可以解决该问题:
方案1:为每个参数显式指定BY VALUE
修改CALL语句,给每个按值传递的参数都加上BY VALUE修饰:
CALL "sum3" USING BY VALUE A BY VALUE B BY VALUE C RETURNING R
方案2:使用BY VALUE ALL简化声明
如果所有参数都需要按值传递,可通过BY VALUE ALL一次性指定后续所有参数的传递方式:
CALL "sum3" USING BY VALUE ALL A B C RETURNING R
完整编译步骤
- 重新编译包含
sum3函数的C库:gcc -c -static -o testlib.o testlib.c - 编译修改后的Cobol程序:
cobc -x -free -o prg2 prg2.cbl testlib.o
运行修改后的程序,即可正确调用sum3函数并得到预期结果(4+3+(-1)=6)。
内容的提问来源于stack exchange,提问作者mysiar
相关产品推荐
相关产品推荐

