comando cpp
Propósito
Executa a inclusão de arquivos e a substituição macro em arquivos de origem de linguagem C.
Sintaxe
/usr/ccs/lib/cpp [ -C ] [ -P ] [ -qDBCS ] [ -IDiretório ] [ -UNome ] [ -DNome [=Defin ition ]] [ -qlanglvl=Idioma ] [ InFile ] [ OutFile ]
Descrição
O comando cpp executa a inclusão de arquivos e a substituição macro em arquivos de origem de linguagem C. Ele lê InFile e grava em OutFile (entrada padrão e saída padrão por padrão.)
O comando cpp foi projetado para se adequar às diretivas de pré-processamento e instruções para a linguagem C conforme definido pelo documento "Rascunho de Norma Nacional Americana para Sistemas de Informação-Programação de Idiomas C" (X3J11/88-159).
O programa cpp reconhece os seguintes nomes especiais:
| Item | Descrição |
|---|---|
| __LINE__ | O número da linha atual. |
| __DATA__ | A data de tradução do arquivo de origem. |
| __TEMPO__ | O tempo de tradução do arquivo de origem. |
| __STDC__ | Indica uma implementação de conformidade. |
| __ARQUIVO__ | O nome do arquivo atual. |
| __STR__ | Indica que o compilador gerará código sequencial para determinadas funções de sequência (conforme definido em /usr/include/string.h) |
| __MATH__ | Indica que o compilador gerará código sequencial para determinadas funções matemáticas (conforme definido em /usr/include/math.h). |
| __ANSI__ | Indica langlvl é configurado igual a ANSI. |
| __SAA__ | Indica langlvl é configurado igual a SAA. |
| __SAA_L2__ | Indica langlvl é configurado igual a SAAL2. |
| __EXTENDED__ | Indica langlvl é configurado igual a estendido. |
| __TIMESTAMP__ | Indica a data e o horário em que o arquivo de origem foi modificado pela última vez. |
Todas as linhas de diretiva cpp devem começar com um # (sinal de libra). Essas diretivas são:
| Item | Descrição |
|---|---|
| #define Nome TokenString | Substitui instâncias subsequentes de Nome por TokenString. |
| #define Nome(Argumento, ...,Argumento) TokenString | Substitui as instâncias subsequentes da sequência Name(Argument, . . . ,Argument ) por TokenString, em que cada ocorrência de um Argument em TokenString é substituída pelo token correspondente na lista separada por vírgulas. Observe que não deve haver nenhum espaço entre Nome e o parêntese esquerdo. |
| #undef Nome | Ignora a definição de Nome a partir deste ponto. |
| #include "Arquivo" ou #include <Arquivo> | Inclui neste ponto o conteúdo de Arquivo, que cpp então processa. Se você colocar File entre " " (aspas duplas), o comando cpp pesquisará primeiro no diretório de InFile, depois nos diretórios nomeados com o sinalizador -I e, por último, nos diretórios de uma lista padrão. Se você usar a notação <Arquivo>, o comando cpp procura por Arquivo apenas nos diretórios padrão. Ele não procura o diretório no qual o InFile reside |
| #line Número ["Arquivo"] | Faz com que a implementação se comporte como se a seguinte sequência de linhas de origem começava com uma linha de origem que tenha um número de linha conforme especificado por Número. Se Arquivo for fornecido, o nome presumido do arquivo será alterado para ser Arquivo. |
| #erro TokenString | Produz uma mensagem de diagnóstico que inclui TokenString.. |
| #pragma TokenString | Uma instrução de implementação definida para o compilador. |
| #endif | Termina uma seção de linhas iniciadas por uma diretiva de teste (#if, #ifdefou #ifndef). Cada diretiva de teste deve ter uma correspondência #endif. |
| #ifdef Nome | Coloca as linhas subsequentes na saída apenas se: Nome foi definido por um #define anterior OU Nome foi definido pela bandeira -D , OU Name é um nome especial reconhecido pelo comando cpp , E Nome não foi indefinido por um interveniente #undef, OU O nome não foi indefinido com o sinalizador -U bandeira. |
| #ifndef Nome | Coloca as linhas subsequentes na saída apenas se: Nome nunca foi definido por um #defineanterior, E Nome não é um nome especial reconhecido pelo comando cpp , OU Nome foi definido por um #define anterior mas ele foi indefinido por uma interveno #undef, OU Name é um nome especial reconhecido pelo comando cpp, mas foi indefinido com o sinalizador -U flag. |
| #if Expressão | Coloca linhas subsequentes na saída apenas se Expressão for avaliada para nonzero. Todos os operadores de C sem designação binária, o?: operadora, e o unário-,!, e-os operadores são legais em Expressão. A precedência das operadoras é a mesma que se definiu na Língua C. Há também um operador unário definido, que pode ser usado na Expressão nestas duas formas:
|
| #elif Expressão | Coloca as linhas subsequentes na saída apenas se a expressão na diretiva precedente #if ou #elif for avaliada como falsa ou estiver indefinida, e esta Expressão é avaliada como true. |
| #else | Coloca linhas subsequentes na saída apenas se a expressão na diretiva anterior #if ou #elif for avaliada como falsa ou estiver indefinida (e, portanto, as linhas seguindo o #if e precedendo o #else foram ignoradas). A condição de cada diretiva de teste é verificada em ordem. Se for avaliado como falso (0), o grupo que ele controla é ignorado. As diretivas são processadas apenas através do nome que determina a diretiva a fim de acompanhar o nível de condicionamento aninhado; o restante dos tokens de pré-processamento das diretivas são ignorados, assim como os demais tokens pré-processamento do grupo. É processado apenas o primeiro grupo cuja condição de controle se avalia para true (nonzero). Se nenhuma das condições for avaliada para true, e houver uma diretiva #else , o grupo controlado pelo #else é processado; faltando uma diretiva #else , todos os grupos até que o #endif sejam ignorados. |
Sinalizações
| Item | Descrição |
|---|---|
| -C | Copia comentários de linguagem C do arquivo de origem para o arquivo de saída. Se você omitira esta bandeira, o comando cpp remove todos os comentários de linguagem C, exceto aqueles encontrados em uma linha de diretiva cpp . |
| -DNome[=Definição] | Define Nome como em uma diretiva #define . O padrão Definição é 1. |
| -IDiretório | Looks primeiro em Directory, então olha nos diretórios na lista padrão para arquivos #include com nomes que não começam com um / (slash). Veja a discussão anterior de #include. |
| -P | Entrada de pré-processos sem produzir informações de controle de linha para a próxima passagem do compilador C. |
| - qDBCS | Especifica modo de conjunto de caracteres de byte duplo. |
| -UNome | Remove qualquer definição inicial de Name, onde Name é um símbolo predefinido pelo pré-processador (exceto para os quatro indicadores do modo pré-processador: __ANSI__, __EXTENDED__, __SAA__, e __SAA_L2__). Esta sinalização não é reconhecida no modo ANSI. |
| -qlanglvl=Idioma | Seleciona um nível de linguagem para processamento. Idioma pode ser ANSI, SAA, SAAL2ou estendido. O padrão é estendido.Nota: Quando Idioma é estendido, _NO_PROTO não é definido automaticamente. Tal definição pode ser feita usando a opção -D no arquivo /etc/xlc.cfg . |
Exemplos
- Para exibir o texto que o pré-processador envia para o compilador C, digite:
Este pré-processospgm.ce exibe o texto resultante na estação de trabalho. Você pode querer ver a saída do pré-processador ao procurar por erros em suas definições macro./usr/ccs/lib/cpp pgm.c - Para criar um arquivo contendo texto pré-processado mais legível, digite:
Este pré-processospgm.ce armazena o resultado empgm.i. Ela omita informações de numeração pretendida para o compilador C (-P), e inclui comentários do programa (-C)./usr/ccs/lib/cpp -P -C pgm.c pgm.i - Para pré-definir identificadores macro, digite:
Isto defineBUFFERSIZEcom o valor512eDEBUGcom o valor1antes do pré-processamento./usr/ccs/lib/cpp -DBUFFERSIZE=512 -DDEBUG pgm.c pgm.i - Para usar os arquivos #include localizados em diretórios não padrão, digite:
Isso se observa no diretório atual para arquivos #include citados, então em/home/jim/includeE, em seguida, nos diretórios padrão. Ele olha em/home/jim/includepara os arquivos #include de ângulo de ângulo (<>) e, em seguida, nos diretórios padrão./usr/ccs/lib/cpp -I/home/jim/include pgm.c - Para pré-processar com a definição ANSI, digite:
/usr/ccs/lib/cpp -qlanglvl=ansi pgm.c
Arquivos
| Item | Descrição |
|---|---|
| /usr/include | Diretório padrão para arquivos #include . |