Pergunta

Para suportar múltiplas plataformas em C / C ++, pode-se usar o pré-processador para permitir a compilação condicional. Por exemplo.,

#ifdef _WIN32
  #include <windows.h>
#endif

Como você pode fazer isso em Ada? Ada tem um pré-processador?

Foi útil?

Solução

A resposta à sua pergunta não é, não Ada não tem um pré-processador que é construído dentro da linguagem. Isso significa que cada compilador pode ou não pode ter um e não há sintaxe "uniforme" para pré-processamento e coisas como a compilação condicional. Isso foi intencional: é considerado "prejudicial" ao ethos Ada

.

Há quase sempre maneiras de contornar a falta de um pré-processador, mas muitas vezes a solução pode ser um pouco complicado. Por exemplo, você pode declarar as funções de plataforma específicas como 'separado' e, em seguida, usar build-ferramentas para compilar o correto (ou um sistema de projeto, usando substituição corpo pragma, ou um sistema de diretório muito simples ... colocar todos os arquivos do Windows em / windows / e todos os arquivos do Linux em / linux / e incluir o diretório apropriado para a plataforma).

Tudo o que está sendo dito, GNAT percebeu que às vezes você precisa de um pré-processador e criou gnatprep. Ele deve funcionar independentemente do compilador (mas você terá de inseri-lo em seu processo de construção). Da mesma forma, para coisas simples (como a compilação condicional) provavelmente você pode simplesmente usar o c pré-processador ou mesmo rolar o seu próprio muito simples.

Outras dicas

AdaCore fornece a gnatprep pré-processador, que é especializado para Ada. Eles afirmam que gnatprep "não depende de qualquer GNAT características especiais", por isso soa como se deve trabalhar com compiladores não-GNAT Ada. Seu Guia do Usuário também fornece alguns condicional compilação conselho .

Eu estive em um projeto onde M4 foi utilizado, bem como, com os arquivos Ada especificação e corporais sufixo como ".m4s" e ".m4b", respectivamente.

A minha preferência é realmente para evitar pré-processamento completamente, e usar apenas os organismos especializados, a criação de CM e o processo de construção de gerenciá-los.

Não, mas o CPP pré-processador ou M4 pode ser chamado em qualquer arquivo na linha de comando ou usando uma ferramenta de construção como marca ou formiga. Sugiro chamando seu arquivo algo .ada mais. Eu tenho feito isso por algum tempo em arquivos Java. Eu chamo o .m4 arquivo java e usar uma regra de make para criar o .java e depois construí-lo de uma forma normal.

Espero que ajuda.

Alguns compiladores Ada1983-velha era ter um pacote chamado a.app que utilizou um subconjunto # -prefixed de Ada (interpretado em tempo de compilação) como uma linguagem pré-processamento para a geração de Ada (a ser então traduzido para código de máquina em de compilação Tempo). do Rational Verdix Ada Sistema de Desenvolvimento (VADS) parece ser o progenitor de a.app entre vários compiladores Ada. Sun Microsystems, por exemplo, o derivado de Ada SPARCompiler VADS e, assim, também teve a.app. Isso não é diferente do uso de PL / I como o pré-processador de PL / I, que a IBM fez.

Capítulo 2 é alguma documentação de olhares que a.app como: http://dlc.sun.com/pdf/802-3641/802-3641.pdf

Sim, tem.

Se você estiver usando o compilador GNAT, você pode usar gnatprep para fazer o pré-processamento, ou se você usar GNAT Programação Studio você pode configurar o seu arquivo de projeto para definir alguns compilação condicional muda como

#if SOMESWITCH then
-- Your code here is executed only if the switch SOMESWITCH is active in your build configuration
#end if;

Neste caso, você pode usar gnatmake ou gprbuild para que você não tem que correr gnatprep à mão.

Isso é muito útil, por exemplo, quando você precisa compilar o mesmo código para vários diferentes OS está usando mesmo transversais diferentes compiladores.

Não, isso não acontece.

Se você realmente quer um, existem maneiras de obter um (Use C de, usar um stand-alone, etc.) No entanto, eu diria contra ela. Foi uma decisão de projeto proposital para não ter um. A idéia de um pré-processador é muito un-Ada.

A maioria do que pré-processador de C é usado para pode ser realizado em Ada de outras maneiras mais confiáveis. A única grande exceção é em fazer pequenas mudanças a um arquivo de origem para suporte multi-plataforma. Dado o quanto isso fica abusado de um programa típico multi-plataforma C, ainda estou feliz que não há suporte para ele no Ada. desenvolvedores poucos C / C ++ Muito pode controlar-se o suficiente para manter as mudanças "menores". O resultado pode funcionar, mas muitas vezes é quase impossível para um ser humano para ler.

A forma habitual Ada para alcançar este objetivo seria colocar o código diferente em diferentes arquivos e usar seu sistema de compilação de alguma forma escolher entre eles em tempo de compilação. Make é poderoso o suficiente muito para ajudá-lo a fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top