Once declared, identifiers can be used freely. Using an identifier before its declaration is called a forward reference, and results in an error, except in the following cases:
goto statement refers to a statement
   label before the label's declaration
   Here are some examples of valid and invalid forward references:
int a;
main ()
{
 int b = c;           /*  Forward reference to c -- illegal         */
 int c = 10;
 glop x = 1;          /*  Forward reference to glop type -- illegal */
 typedef int glop;
 goto test;           /*  Forward reference to statement label --
                          legal                                     */
test:
 if (a > 0 ) b = TRUE;
}
The following example shows the use of a structure tag in a forward reference:
struct s
  { struct t *pt };    /*  Forward reference to structure t         */
.                      /* (Note that the reference is preceded      */
.                      /* by the  struct keyword to resolve         */
.                      /* potential ambiguity)                      */
struct t
   { struct s *ps };