Expressões de constante C
Uma expressão constante é avaliada em tempo de compilação, não o tempo de execução, e pode ser usada em qualquer local em que uma constante pode ser usada. A expressão constante deve ser avaliada como uma constante que está no intervalo de valores representáveis para esse tipo. Os operandos de uma expressão constante podem ser constantes de inteiro, constantes de caractere, constantes de ponto flutuante, constantes de enumeração, conversões de tipos, expressões sizeof e outras expressões constantes.
Sintaxe
constant-expression:
conditional-expressionconditional-expression:
logical-OR-expressionlogical-OR-expression**?** expression**:** conditional-expression
expression:
assignment-expressionexpression**,** assignment-expression
assignment-expression:
conditional-expressionunary-expression assignment-operator assignment-expression
assignment-operator: um de
= *= /= %= += –= <<= >>= &= ^= |=
Os não terminais para struct declarator, enumerator, direct declarator, direct-abstract declarator, and labeled statement contêm não terminais constant-expression.
Uma expressão constante integral deve ser usada para especificar o tamanho de um membro de campo de bit de uma estrutura, o valor de uma constante de enumeração, o tamanho de uma matriz ou o valor de uma constante case.
As expressões constantes usadas em políticas de pré-processador estão sujeitas às restrições adicionais. Em virtude disso, elas são conhecidas como “expressões constantes restritas.” Uma expressão constante restrita não pode conter expressões sizeof, constantes de enumeração, conversões de tipos para qualquer tipo ou constantes do tipo flutuantes. No entanto, ela não pode conter a expressão constante especial defined (identifier).