Dans ce qui suit, comment puis-je définir ma fonction avec la syntaxe typedef ?
typedef void F();
//declare my function
F f;
//error
F f { }
Dans ce qui suit, comment puis-je définir ma fonction avec la syntaxe typedef ?
typedef void F();
//declare my function
F f;
//error
F f { }
La définition de la fonction suit la syntaxe habituelle :
//declare my function
F f; //it is exactly equivalent to : void f();
//definition
void f() { cout << "hello world"; }
Pour vérifier que la définition est bien la définition de la fonction qui est précédemment déclarée appeler la fonction f()
juste après déclaration et avant (lire les commentaires dans main()
):
//declaration
F f;
int main()
{
f(); //at compile-time, it compiles because of *declaration*
}
//definition
void f() { std::cout << "hello world" << std::endl; }
Démonstration : http://ideone.com/B4d95
Pour ce qui est de la raison pour laquelle F f{}
ne fonctionne pas, car elle est spécifiquement interdite par la spécification du langage. Le §8.3.5 (C++03) dit
Un typedef de type fonction peut être utilisé pour déclarer une fonction mais ne doit pas être utilisé pour définir une fonction (8.4) .
[Example:
typedef void F();
F fv; // OK: equivalent to void fv();
F fv { } // ill-formed
void fv() { } // OK: definition of fv
—end example]
Points importants :
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.