Il est très probablement implémenté comme (ou une variante de celui-ci) :
void print_fibs()
{
//implementation
}
int ignore = (print_fibs(), 0);
int main() {}
Dans ce code, la variable globale ignore
doit être initialisé avant d'entrer dans main()
fonction. Maintenant, afin d'initialiser le global, print_fibs()
doit être exécuté là où vous pouvez faire n'importe quoi - dans ce cas, calculer les nombres de Fibonacci et les imprimer ! J'ai montré une chose similaire dans la question suivante (que j'avais posée il y a longtemps) :
Notez qu'un tel code n'est pas sûr et doit être évité en général. Par exemple, le code std::cout
peut ne pas être initialisé lorsque print_fibs()
est exécuté, si c'est le cas, qu'est-ce que std::cout
dans la fonction ? Cependant, si dans d'autres circonstances, il ne dépend pas de cet ordre d'initialisation, alors il est sûr d'appeler les fonctions d'initialisation (ce qui est une pratique courante en C et C++).