Como fazer o Pro*C lidar com as diretivas #warning?
-
08-06-2019 - |
Pergunta
Quando tento pré-compilar um arquivo *.pc que contém uma diretiva #warning, recebo o seguinte erro:
PCC-S-02014, encontrou o símbolo "aviso" ao esperar um dos seguintes:(blá bla bla).
Posso de alguma forma convencer o Pro*C a ignorar a coisa se não souber o que fazer com ela?não consigo remover o #warning
diretiva, pois é usada em um arquivo de cabeçalho que não posso alterar e devo incluir.
Solução
De acordo com Guia do programador Pro*C/C++ (capítulo 5 "Tópicos Avançados"), o Pro*C ignora silenciosamente uma série de diretivas do pré-processador, incluindo #error e #pragma, mas infelizmente não #warning.Como suas diretivas de aviso estão incluídas em um arquivo de cabeçalho, você poderá usar a macro ORA_PROC:
#ifndef ORA_PROC
#include <irrelevant.h>
#endif
Por alguma razão, o Pro*C comete erros se você tentar ocultar um #warning direto dessa maneira.
Outras dicas
opção de uso parse=none
com processo
Você não pode.Pro*C só sabe #if e #include.Meu melhor conselho seria pré-processar o arquivo como parte do processo de construção para remover coisas que o Pro*C não gostará.Algo como
grep -v -E '^#(warning|pragma|define)' unchangeable.h >unchangeable.pc.h
Meu outro conselho seria evitar a abominação que é o Pro*C, mas acho que você está preso a ela...
A resposta de Jons Ericson está correta.
Há uma segunda circunstância em que você pode precisar usar esse truque.
Algumas versões do Pro*c não conseguem lidar com arquivos incluídos que não possuem uma extensão de arquivo.
A constante ORA_PROC também é uma solução viável para esse problema.
/bin/make -f /css/hwmig/pcprg/proc9i32.mk procflags = "sqlcheck = semântica userID = cssd/Índia09" pccsrc = bic i_sym = incluir = pc1 proc SqlCheck = semântico userID = cssD/ .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
Pró*C/C++:Versão 9.2.0.6.0 - Produção em terça-feira, 2 de dezembro, 14:05:38 2008
Direitos autorais (c) 1982, 2002, Oracle Corporation.Todos os direitos reservados.
Valores de opção padrão do sistema obtidos de:/oracle/Ora92/precomp/admin/pcscfg.cfg
Erro de sintaxe na linha 135, coluna 2, arquivo /usr/include/standards.h:Erro na linha 135, coluna 2 no arquivo /usr/include/standards.h
aviso A opção -qdfp é necessária para processar o código DFP nos cabeçalhos.
.1 PCC-S-02014, encontrou o símbolo "aviso" ao esperar um dos seguintes G:
Uma constante numérica, newline, define, elif, elif, endif, erro, se, ifdef, ifndef, incluir, linha, Pragma, Undef, um comando pré -processador imediato, um token C, o símbolo "nova linha" foi substituído por "aviso " continuar.
Erro de sintaxe na linha 30, coluna 7, arquivo bic.pc:Erro na linha 30, coluna 7 no arquivo bic.pc fp;...... 1 PCC-S-02201, encontrou o símbolo "" ao esperar um dos seguintes:
;, = ([O símbolo ";" foi substituído por "*" para continuar.
Erro na linha 0, coluna 0 no arquivo bic.pc pcc-f-02102, erro fatal ao fazer pré-processamento C
Remova as duas linhas abaixo de /usr/include/standards.h
aviso A opção -qdfp é necessária para processar o código DFP nos cabeçalhos.
outro
Modificar /usr/include/standards.h
.
Exclua a linha #warning The -qdfp option is required to process DFP code in headers.
O proc não suporta o #warning
,apenas #else
#if
etc.