Em C, sabe-se que #define
as macros devem usar parênteses. Veja, por exemplo , macros C e uso de argumentos entre parênteses .
No entanto, em código incorporado, frequentemente vejo isso sendo usado mesmo com inteiros . Por exemplo:
#define OFFSET (0x100)
Qual é o sentido dos parênteses quando a macro é simplesmente um número inteiro constante? Em que caso eles poderiam fazer a diferença?
A menos que sejam usadas em construções específicas, as macros devem se expandir para uma única expressão primária ou uma única instrução sem o ponto e vírgula final. A razão para isso é evitar problemas de precedência do operador quando a macro é invocada como parte de uma expressão ou como uma instrução em uma instrução composta.
Colocar a expansão entre parênteses é uma maneira simples de garantir que a expansão seja uma expressão primária. No entanto, como você notou, constantes numéricas e literais de string não requerem o conjunto de parênteses para essa finalidade.
Observe, entretanto, que os parênteses são recomendados para números negativos, que são expressões, não constantes numéricas, como em
Portanto, usar parênteses para números positivos e negativos pode ser uma questão de consistência.
O exemplo postado parece ser o caso de um ou uma combinação destes:
Os parênteses extras não fazem diferença na maioria dos casos. No entanto, eles terão alguns efeitos colaterais em casos extremos que, de qualquer maneira, são erros ou horrores:
func OFFSET
irá compilar para uma chamada de funçãofunc
com um único argumento0x100
Mais importante ainda, os argumentos macro devem sempre estar entre parênteses, exceto possivelmente quando usados como argumentos de função ou macro na expansão.
Acho que é para maior clareza, torna o código mais explícito e mais fácil de entender para outros desenvolvedores quando inclui parênteses.
além disso, também depende do estilo de codificação do desenvolvedor que está familiarizado.
é bom usar parênteses em macros, mesmo ao definir valores inteiros constantes.
esta prática pode ajudá-lo a evitar problemas sutis e/ou tornar seu código mais fácil de manter/legível
As questões sutis são como:
na minha experiência, talvez seja NÃO.