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 };