Il est très probablement implémenté comme (ou une variante de celui-ci):
void print_fibs()
{
}
int ignore = (print_fibs(), 0);
int main() {}
Dans ce code, la variable globale ignoredoit être initialisée avant d'entrer en main()fonction. Maintenant, pour 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! Une chose similaire que j'ai montrée 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, l' std::coutobjet peut ne pas être initialisé lorsqu'il print_fibs()est exécuté, si oui, que ferait std::cout-il dans la fonction? Cependant, si dans d'autres circonstances, cela ne dépend pas d'un tel ordre d'initialisation, alors il est prudent d'appeler des fonctions d'initialisation (ce qui est une pratique courante en C et C ++).