Pregunta

Dado un prototipo de función, y una definición de tipo:

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

es la siguiente situación definida por la norma:

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

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

¿Debo obtener el tipo de coacción predecible a través del prototipo de la función?

¿Fue útil?

Solución

Si su pregunta es realmente acerca de si los tipos de argumento y el partido parámetro, entonces la respuesta es sí. typedef no introduce un nuevo tipo, que sólo crea alias para una ya existente. b variable tiene el tipo unsigned int, al igual que el parámetro, a pesar de que b se declara usando typedef-nombre blatherskite.

Su ejemplo no es muy bueno para demostrar que sin embargo. Todos los tipos integrales son convertibles entre sí en C ++, por lo que (ignorando los problemas de rango) el código habría definido el comportamiento incluso si blatherskite designa un tipo diferente (un nuevo tipo). Pero no lo hace. Así que esto también es perfectamente válido

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

Otros consejos

No se necesita ningún tipo de coacción. El typedef es sólo un alias para el mismo tipo, por lo que está pasando una unsigned short a una función que toma un unsigned short.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top