/******************** STATEMENTS************************************** ** ** &IF, &THEN, &ELSEIF, &ELSE, &ENDIF ** ** &MESSAGE ** ** &OPSYS ** ** &WINDOW-SYSTEM ** **********************************************************************/ Código: &IF "{&OPSYS}" = "msdos" &THEN &MESSAGE Voce esta em uma plataforma msdos &IF "{&WINDOW-SYSTEM}" <> "" &THEN &MESSAGE A base usada e {&WINDOW-SYSTEM} &ENDIF &ELSEIF "{&OPSYS}" = "unix" &THEN &MESSAGE Voce esta em uma plataforma unix &ELSE &MESSAGE Voce nao esta em uma plataforma unix ou msdos &ENDIF
O & é uma diretiva do pré-processador do compilador. Estas diretivas são resolvidas em tempo de compilação, e não em execução. Para alguns casos isso é interessante, por exemplo: Código: &if dbtype('sports') = 'progress' &then /* código de acesso a dados otimizado para Progress */ &elseif dbtype('sports') = 'mss' &then /* código de acesso a dados otimizado para SQL Server */ &elseif dbtype('sports') = 'oracle' &then /* código de acesso a dados otimizado para Oracle */ &endif. No .r final só vai um dos 3 pedaços de código. O compilador calcula a expressão e ignora o resto. É como se não estivesse no fonte. Quando o programa for executar o teste &IF não existirá mais.
hummm bom... acho que entendi... perguntei pq vejo muito isso em fontes liberados da totvs e nunca cheguei a usar.
Sim, é bem normal nos fontes da TOTVS. A vantagem é que tudo que você puder calcular durante a compilação, não precisará ser calculado durante a execução. A lógica básica é: vou gastar mais tempo compilando, mas vou executar mais rápido. Nem tudo pode ser feito com pré-processador. Qualquer coisa que envolva os dados da tabela não tem chance. Isso é bom para programas que rodam em vários ambientes. O EMS 2, por exemplo, tem 3 versões ativas (2.02, 2.04 e 2.06B), e 3 tipos de bancos de dados suportados (Pgs, SQL, Oracle). Quando é necessário algum tratamento diferenciado para uma versão ou tipo de banco de dados, é utilizado com pré-processador, pois estas informações são conhecidas no momento da compilação...