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

15

Estou lendo "Programação King K.N's C" e encontrei a seguinte declaração:

We discussed using the expression sizeof(a)/sizeof(a[0]) to calculate the number of elements in an array. The expression sizeof(a)/sizeof(t), where t is the type of a's elements, would also work, but it is considered an inferior technique.

Por que é considerada uma técnica inferior?

    
por Higgs 06.07.2015 / 23:42
fonte

1 resposta

25

sizeof(a)/sizeof(t) codifica explicitamente o tipo na expressão. Agora você tem o tipo especificado em vários locais, sem suporte ao compilador para garantir que você esteja usando o mesmo tipo. Então, se você alterar o tipo base da matriz, mas não na expressão count (completamente separada), bingo: seu código irá compilar muito bem, mas sua contagem de elementos estará errada. Se você tiver sorte, seu programa falhará, mas, se não funcionar, funcionará quase completamente corretamente, mas de vez em quando se comportará de forma totalmente estranha.

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

    
por 07.07.2015 / 02:38
fonte

Tags