Stavo guardando un esempio che mostrava il motivo per cui digitare un puntatore è una cattiva pratica. La parte che non ho capito sull'esempio è che il compilatore non è stato in grado di cogliere il problema. Ho elaborato l'esempio nella seguente codice:typedef'ng un puntatore e const
#include <stdio.h>
typedef int *TYPE;
void set_type(TYPE t) {
*t = 12;
}
void foo(const TYPE mytype) {
set_type(mytype); // Error expected, but in fact compiles
}
int main() {
TYPE a;
int b = 10;
a = &b;
printf("A is %d\n",*a);
foo(a);
printf("A is %d\n",*a);
return 0;
}
Così, ero in grado di cambiare il valore di a
. Anche se, l'esempio ha spiegato che dovresti fare, typedef const int *TYPE
, per risolvere il problema, non capisco perché il compilatore non è stato in grado di rilevare l'errore quando sto impostando TYPE to be const
nell'argomento della funzione stessa. Sono sicuro che mi manca qualcosa di molto semplice.
Risposta, NON. 'typedef'ing un puntatore causerà più problemi rispetto ai benefici di" * sintassi sugar * ". –
Sono sicuro che hai ragione, ma mi dispiace, non era la risposta che stavo cercando. –
Il tuo problema deriva dal nascondere la semantica del puntatore. Come ha scritto @iharob: non puntare 'typedef'. Ciò porta solo alla confusione e agli errori sottili.6 Si noti che non è possibile modificare il valore di 'a' nelle funzioni, ma solo di' * a', cioè 'b'. 'a' è abbastanza inutile, potresti aver passato' & b' a 'foo' e stampato' b' direttamente. – Olaf