Espaços nominais
Variantes
Acções

#pragma

Da cppreference.com


    #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()

Índice

[editar] GNU C Compiler (GCC) - GNU/Linux, BSD, GNU/Hurd, GNU/Darwin/Mac OS X, Windows (MinGW)

[editar] redefine_extname

    #pragma redefine_extname printf prnt

Dá às funções de C um diferente símbolo definido pelo programador quando traduzido para linguagem assembly.

[editar] extern_prefix

    #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.

[editar] pack

    #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 -/>