【问题标题】:How to make Pro*C cope with #warning directives?如何让 Pro*C 应对 #warning 指令?
【发布时间】:2010-09-06 02:16:08
【问题描述】:

当我尝试预编译包含 #warning 指令的 *.pc 文件时,我收到以下错误:

PCC-S-02014,在预期以下情况之一时遇到“警告”符号:(bla bla bla)。

如果 Pro*C 不知道如何处理它,我能否以某种方式说服 Pro*C 忽略它?我无法删除 #warning 指令,因为它用于我无法更改且必须包含的头文件中。

【问题讨论】:

    标签: c oracle oracle-pro-c


    【解决方案1】:

    将选项 parse=none 与 proc 一起使用

    【讨论】:

      【解决方案2】:

      修改/usr/include/standards.h.
      删除#warning The -qdfp option is required to process DFP code in headers.这一行proc不支持#warning,只支持#else#if

      【讨论】:

      • 这是绝对是错误的答案。在任何情况下,您都应该绝不修改系统标头以修复应用程序错误。
      【解决方案3】:

      从 /usr/include/standards.h 中删除以下两行

      警告 -qdfp 选项是处理标头中的 DFP 代码所必需的。

      其他

      【讨论】:

        【解决方案4】:

        /bin/make -f /css/hwmig/pcprg/proc9i32.mk PROCFLAGS="sqlcheck=SEMANTICS userid=cssd/india09" PCCSRC=bic I_SYM=include= pc1 proc sqlcheck=SEMANTICS userid=cssd/india09 iname=bic include=. include=/oracle/Ora92/precomp/public include=/oracle/Ora92/rdbms/public include=/oracle/Ora92/rdbms/demo include=/oracle/Ora92/plsql/public include=/oracle/Ora92/network/public

        Pro*C/C++:发布 9.2.0.6.0 - 2008 年 12 月 2 日星期二 14:05:38 生产

        版权所有 (c) 1982, 2002,甲骨文公司。保留所有权利。

        系统默认选项值取自:/oracle/Ora92/precomp/admin/pcscfg.cfg

        第 135 行,第 2 列,文件 /usr/include/standards.h 的语法错误: 文件 /usr/include/standards.h 中的第 135 行第 2 列出错

        警告 -qdfp 选项是处理标头中的 DFP 代码所必需的。

        .1 PCC-S-02014,在预期以下之一时遇到符号“警告” 克:

        数字常量、换行符、define、elif、else、endif、 错误、if、ifdef、ifndef、include、line、pragma、undef、 立即预处理器命令、C 标记、 符号“换行”被替换为“警告”以继续。

        文件 bic.pc 第 30 行第 7 列的语法错误: 文件 bic.pc 中第 30 行第 7 列的错误 文件 fp; ......1 PCC-S-02201,在预期以下情况之一时遇到符号“”:

        ; , = ( [ 符号“;”被替换为“*”以继续。

        文件 bic.pc 中的第 0 行第 0 列出错 PCC-F-02102,进行 C 预处理时出现致命错误

        【讨论】:

          【解决方案5】:

          Jons Ericsons 的答案是正确的。

          在第二种情况下,您可能需要使用该技巧。

          某些版本的 Pro*c 无法处理没有文件扩展名的包含文件。

          ORA_PROC 常量也是该问题的一种可行解决方案。

          【讨论】:

            【解决方案6】:

            根据 Pro*C/C++ 程序员指南(第 5 章“高级主题”),Pro*C 默默地忽略了一些预处理器指令,包括 #error 和 #pragma,但遗憾的是没有 #警告。由于您的警告指令包含在头文件中,您也许可以使用 ORA_PROC 宏:

            #ifndef  ORA_PROC
            #include <irrelevant.h>
            #endif
            

            但是,由于某种原因,如果您尝试以这种方式隐藏直接的#warning,Pro*C 就会出错。

            【讨论】:

              【解决方案7】:

              你不能。 Pro*C 只知道#if 和#include。我最好的建议是将文件预处理作为构建过程的一部分,以删除 Pro*C 不喜欢的东西。类似的东西

              grep -v -E '^#(warning|pragma|define)' unchangeable.h >unchangeable.pc.h
              

              我的另一个建议是避免令人憎恶的 Pro*C,但我猜你会坚持下去......

              【讨论】:

                猜你喜欢
                • 2010-09-16
                • 1970-01-01
                • 2011-09-13
                • 1970-01-01
                • 1970-01-01
                • 2010-09-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多