Por que preferir sizeof (elemento) sobre sizeof (TYPE) para calcular o número de elementos em uma matriz?


15

Estou lendo "Programação C do King KN" e encontrei a seguinte declaração:

Discutimos o uso da expressão sizeof(a)/sizeof(a[0])para calcular o número de elementos em uma matriz. A expressão sizeof(a)/sizeof(t), onde t é o tipo dos elementos de a, também funcionaria, mas é considerada uma técnica inferior.

Por que é considerada uma técnica inferior?


8
você considerou o que aconteceria se o programador alterasse o tipo de elementos em um? para um tipo com tamanho diferente de t. A primeira expressão ainda será boa, enquanto a segunda será interrompida
gnat

1
@gnat: Você deve fazer disso uma resposta.
Martin York

Respostas:


26

sizeof(a)/sizeof(t)codifica explicitamente o tipo na expressão Agora você tem o tipo especificado em vários locais, sem suporte do compilador para garantir que você está usando o mesmo tipo. Portanto, se você alterar o tipo base da matriz, mas não na expressão de contagem (completamente separada), bingo: seu código será compilado muito bem, mas sua contagem de elementos estará incorreta. Se você tiver sorte, seu programa falhará, mas, caso contrário, funcionará quase completamente corretamente, mas de vez em quando se comportará de maneira totalmente bizarra.

sizeof(a)/sizeof(a[0])é garantido que esteja correto, exigindo apenas o nome da matriz. Mude o tipo e você está bem; mude o nome do array e o compilador irá reclamar. Não é necessário pensar: gostamos desse tipo de programação.


Bem, eu realmente prefiro sizeof a/sizeof*a, mesmo que não seja realmente uma diferença substancial.
Deduplicator
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.