Diferença entre char * var; e char * var ;?

Apenas imaginando se existe alguma diferença entre:

char* var; char *var; 

ou é apenas uma questão de preferência (espaçamento)?

Não há diferença neste caso. No entanto, você deve preferir char *var; .

Isso ocorre porque o * está associado mais de perto com o nome da variável e não faz parte do tipo base . Por exemplo, se você fizer isso:

 char* a, b; 

O que você tem é a , um ponteiro para char e um char . Isso é confuso! Como o caractere * está mais próximo da palavra-chave char , esperamos que os tipos de ambas as variables ​​sejam de ponteiro para char , mas o * na verdade está associado apenas a . (Isto é similar a char a[10], b; como apontado por teppic nos comentários; o [10] especificador é da mesma forma associado apenas a , e então somente a será um array.)

A declaração correta seria:

 char *a, *b; 

Colocar o especificador * mais próximo da variável significa que é fácil ver o que está acontecendo quando você pretende que uma variável seja um ponteiro e a outra não:

 char *a, b; 

Neste caso, é óbvio que b não se destina a ser um ponteiro. No exemplo original ( char* a, b; ), não sabemos se o programador pretende ou não que b seja um ponteiro. Tomando emprestado de Douglas Crockford, tudo o que sabemos é que o programador é incompetente.

Algumas pessoas gostam de colocar um espaço antes e depois do * :

 char * a, * b; 

Isso é vítima do mesmo problema ilustrado acima: se b não é um ponteiro, então a declaração ( char * a, b; ) também pode levar à incerteza sobre a intenção do programador. Portanto, sugiro não colocar um espaço entre o * e o nome da variável 1 .

Qualquer maneira que você olhe, char* var; deve ser tratado como estilo ruim. É gramaticalmente correta de acordo com a especificação da linguagem, mas leva a um código ilegível porque parece indicar que o especificador * é parte do tipo compartilhado por todas as variables ​​na mesma declaração, quando não é. (É como escrever uma function complexa na mesma linha – funciona, mas é uma má idéia. Há casos em que a legibilidade e a manutenção substituem as preferências estilísticas pessoais, e essa é uma delas.)


1 Pessoalmente, eu prefiro colocar um espaço após o * somente ao lidar com os valores de retorno da function:

 char * foo(); 

Isso não é ambíguo: é uma function que retorna um ponteiro para um char .

 char *foo(); 

O programador quis dizer uma function que retorna um ponteiro para um char , ou ele quis criar um ponteiro para uma function que retorna char ? A linguagem resolverá isso como idêntico ao outro protótipo, mas nosso objective é a legibilidade, e isso significa transmitir exatamente o que queremos dizer para os humanos , não apenas para o compilador.

Não há diferença, apenas uma questão de preferência como você mesmo disse

    Intereting Posts