Domanda

Dato un prototipo di funzione, e una definizione di tipo:

int my_function(unsigned short x);
typedef unsigned short blatherskite;

è la seguente situazione definito dalla norma:

int main(int argc, char** argv) {
  int result;
  blatherskite b;

  b=3;
  result = my_function(b);
}

Devo ottenere il tipo di coercizione prevedibilmente tramite il prototipo di funzione?

È stato utile?

Soluzione

Se la tua domanda è davvero di se i tipi di argomento e il match dei parametri, allora la risposta è sì. typedef non introduce un nuovo tipo, si crea solo alias per uno esistente. b variabile ha tipo unsigned int, proprio come il parametro, anche se b è dichiarato usando typedef-name blatherskite.

Il tuo esempio non è molto buona per dimostrare che anche se. Tutti i tipi integrali sono convertibili all'altra in C ++, quindi (ignorando problemi di range) il codice avrebbe definito comportamento anche se blatherskite designato un tipo diverso (un nuovo tipo). Ma non è così. Quindi questo è anche perfettamente valido

void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid

Altri suggerimenti

Non è necessaria alcuna tipo di coercizione. Il typedef è solo un alias per lo stesso tipo, in modo che stai passando un unsigned short ad una funzione che prende un unsigned short.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top