OK, cela n'a aucune conséquence grave, mais ça m'énerve pour un
alors: Est-il une raison pour que la distinction entre l' ->
et .
opérateurs?
Bien sûr, la règle actuelle est qu' .
des actes sur une struct, et ->
agit sur
un pointeur vers une struct (ou union). Mais voici comment cela fonctionne dans la pratique.
Laissez - s
être un struct, dont un élément x
, et laissez - ps
être un pointeur vers une struct de la même forme.
Si vous écrivez
s->x
le compilateur générera un message d'avertissement dans la façon de
Vous signifiait s.x. Veuillez retaper et recompiler.
Si vous écrivez
ps.x
le compilateur générera un message d'avertissement dans la façon de
Vous signifiait ps ->. x.; Veuillez retaper et recompiler.
Parce que le compilateur connaît le type des deux s
et ps
au moment de la compilation, il a toutes les informations dont il a besoin pour interpréter ce que le bon opérateur. Je soupçonne que ce n'est pas comme les autres mises en garde (comme un point-virgule manquant), en qui il n'y a aucune ambiguïté sur le bon correctif.
Voici donc une proposition hypothétique de la C1x comité des normes (qui ne serait jamais considérée, parce que l'ISO est un conservateur traînée):
Compte tenu de l'expression de gauche.rhs, si g est un struct ou union de type, ensuite, l'expression renvoie à l'élément de lhs nommé rhs. Si g est de type pointeur vers une struct ou union, alors ce sera interprété comme (*lhs).rhs.
Ce serait certainement nous sauver tous les temps, et de le rendre plus facile pour les gens à apprendre le C [et j'ai appris assez de C à dire avec autorité que les apprenants trouvent l' ->
chose à être source de confusion ou ennuyeux.]
Il y a même des précédents, où C n'est une poignée d'autres choses. E. g., pour la mise en œuvre des raisons, les déclarations de fonction sont toujours exprimés de pointeur de fonction, de sorte qu' f(x,y)
et (*f)(x,y)
à la fois travailler indépendamment de si f
a été déclarée comme une fonction ou d'un pointeur de fonction.
Donc, ma question: quel est le problème avec cette proposition? Pouvez-vous penser à des exemples de cas où il serait fatal de l'ambiguïté entre ps.x
et s.x
, ou pourquoi garder obligatoire distinction est par ailleurs utile?