Déclaration de données en code C étrange

Je regarde le fichier de code trouvé ici https://sourceware.org/svn/gcc/tags/var-tracking-assignments-merge-150905-before/gcc/testsuite/gcc.target/i386/loop-1. c (je l’ai trouvé sous un dossier appelé gcc-torture. Il s’avère que cela ne torture pas seulement gcc)

Ma question est la suivante: combien de déclarations de données juridiques cet extrait de code a-t-il?

f1 (a) long a; { int i; for (i = 0; i < 10; i++) { if (--a == -1) return i; } return -1; } 

Je crois qu’il n’en a qu’un ( int i; ), mais je ne suis pas sûr de ce qui est étrangement placé long a; . Est-ce que cela compte comme une déclaration de données? Comment est-il même légal de farcir une déclaration de données apparente se terminant par un fin de ligne dans une déclaration de fonction?

C’est la syntaxe K & R pour la définition de fonction. C’est à peu près obsolète maintenant, mais peut toujours être compilé. Ce sont identiques:

 // K&R int func(a, b) int a; double b; { return 0; } // ANSI int func(int a, double b) { return 0; }