#pragma lexems
O comando #pragma permite que o programador diga ao compilador para fazer certas coisas. Uma vez que o comando #pragma é específico da implementação, os seus usos variam de compilador para compilador. Uma opção possível é traçar a execução do programa.
Abaixo estão algumas famílias de compiladores, o sistema operativo no qual eles são encontrados e as directivas pragma que são parte dessa implementação.
Além disso, pragma é usado para permitir que o programador invoque uma função antes de main ser invocada ou depois de main terminar.
#pragma startup fun() //A função deve ter void como tipo de retorno e zero parâmetros. #pragma exit fun1()
#pragma redefine_extname printf prnt
Dá às funções de C um diferente símbolo definido pelo programador quando traduzido para linguagem assembly.
#pragma extern_prefix ext_ // começar prefixação // símbolos externos com o prefixo assembly aqui #pragma extern_prefix // acabar prefixação
Prefixa todos os símbolos de assembly de funções externas com o prefixo string. Outro #pragma extern_prefix acabará a prefixação de funções externas.
#pragma pack(64) // optimizar todas as subsequentes classes, uniões (union), e estruturas (struct) para código de 64 bits
Packing é um método de optimização que faz com que os membros de estruturas, classes e uniões se alinhem a um factor da fronteira de packing. Isto normalmente torna mais fácil (logo mais rápido) para o processador para aceder a dados uma vez que está packed para alinhar com o que o processador está habituado a lidar, contudo gasta memória por ter “lixo” inserido para alinhar o código com o pack. O valor numérico entre parênteses tem de ser um factor de 2 (2, 4, 8, 16, 32, 64….). Há outras maneiras de usar “pack” e elas estão descritas abaixo mas acima é o método mais simples e mais comum. Pode usar
#pragma pack() /* com parênteses vazios */
para definir o packing para o default do compilador.
← #pragma pack(push) e #pragma pack(pop) estão a caminho, ainda estou a pesquisá-los a eles e à sua funcionalidade. -/> ← Este documento ainda está em construção, pretendo continuar a adicionar compiladores e as suas opções pragma em vez de deixar este enorme branco. -GinoMan -/>
← #pragma pack(push) and #pragma pack(pop) are on the way, I'm still researching them and their functionality. -/> ← This document is still under construction, I intend to continue adding compilers and their pragma options instead of leaving this largely blank. -GinoMan -/>