Cuidado com as pegadinhas da linguagem C

Hoje Alan Cox corrigiu um erro que para muitas pessoas poderia passar despercebido:

http://permalink.gmane.org/gmane.linux.drivers.video-input-infrastructure/51272

Resolvi testar e inicialmente apenas declarei a variável mac e mandei exibir o tamanho, como esperado retornou 6. Então resolvi criar uma função e passar o vetor mac[6] como no arquivo az6007.c.
Para minha surpresa ele retornou 4. Portanto durante a compilação o vetor é convertido em ponteiro, para evitar a passagem por cópia.


#include<stdio.h>
void calcsize(unsigned char mac[6])
{
printf("Size of mac is %d\n", sizeof(mac));
}
int main (void)
{
unsigned char mymac[6];
mymac[0] = 0x56;
mymac[1] = 0xff;
mymac[2] = 0xf0;
mymac[3] = 0x1b;
mymac[4] = 0x97;
mymac[5] = 0xbf;
printf("Size of mymac is %d\n", sizeof(mymac));
calcsize(mymac);
return 0;
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s