Question

Étant donné un prototype de fonction, et une définition de type:

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

La situation suivante définie par la norme:

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

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

Dois-je obtenir la contrainte de type via le prototype prévisible de fonction?

Était-ce utile?

La solution

Si votre question est vraiment de savoir si les types de l'argument et le match de paramètre, alors la réponse est oui. typedef ne présente pas un nouveau type, il ne crée que alias pour une entreprise existante. b variable est de type unsigned int, tout comme le paramètre, même si b est déclaré à l'aide blatherskite typedef-nom.

Votre exemple est pas très bon pour démontrer que, bien que. Tous les types entiers sont convertibles entre eux en C ++, donc (sans tenir compte des problèmes de portée) le code aurait un comportement défini, même si blatherskite désigné un autre type (un nouveau type). Mais il ne fonctionne pas. Donc, c'est aussi parfaitement valide

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

Autres conseils

Aucune contrainte de type est nécessaire. Le typedef est juste un alias pour le même type, de sorte que vous passez un unsigned short à une fonction qui prend une unsigned short.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top