#define MAX(a,B)    (((a) > (B)) ? (a) : (B))
#define MIN(a,B)    (((a) < (B)) ? (a) : (B))
struct edge
{
  int     y_max;       /* maior y da aresta */
  int     y_min;      /* menor y da aresta */
  float   xs;      /* x correspondente a ys */
                      /* (no início é o correspondente a y_max) */
  float delta; /* incremento de xs entre duas linhas de scan */
};
void fill (int np, int *x, int *y)
{
  static struct edge *aresta=NULL;    /* vetor de arestas */
  static int *vxs=NULL;        /* vetor de interseções */
  static int old_np=0;    /* número de pontos da última chamada */
  int ymax, ymin;    /* limites do polígono */
  int num_inters;    /* num. de interseções */
  int num_arestas;    /* num. de arestas */
  int ys;        /* ordenada da reta de scan */
  int i;
/* realoca os vetores de arestas e de interseções */
  if (np > old_np)
  {
    old_np=np;
    if (vxs) free (vxs);
    if (aresta) free (aresta);
    vxs=(int *) malloc ((np-1)*sizeof(int)); /* max num. De inters.*/
    aresta=(struct edge *) malloc (np*sizeof(struct edge)); 
  }
  /* calcula y max e min e monta o vetor de arestas */
  ymax = y[0];
  ymin = y[0];
  num_arestas = 0;
  for(i=0;i<np;i++)
  {
    int i1=(i+1)%np;
    if (y[i] != y[i1])
    {
      aresta[num_arestas].y_max = MAX(y[i],y[i1]);
      aresta[num_arestas].y_min = MIN(y[i],y[i1]);
      aresta[num_arestas].delta = ((float)(x[i1]-x[i])/(float)(y[i1]-y[i]));
      if (aresta[num_arestas].y_min == y[i])
        aresta[num_arestas].xs = x[i];
      else
        aresta[num_arestas].xs = x[i1];
      ymax = MAX( ymax, aresta[num_arestas].y_max );
      ymin = MIN( ymin, aresta[num_arestas].y_min );
      num_arestas++;
    }
  }
  for(ys=ymin; ys<ymax; ys++) /* para cada linha de scan */
  {
    num_inters = 0;
    for(i=0; i<num_arestas; i++)
    {
      if (aresta[i].y_max < ys)     /* retira da lista de arestas */
      {
        aresta[i] = aresta[num_arestas-1];
        num_arestas--;
      }
     
      if((ys>=aresta[i].y_min)&&(ys<aresta[i].y_max)) /* intersepta */
      {
        vxs[num_inters] = aresta[i].xs;
        aresta[i].xs += aresta[i].delta; /* atualiza o xs */
        num_inters++;
      }
    } /* for */
    ordena(vxs,0,num_inters-1);    /* ordena as interseções */
    for(i=0;i<num_inters;i+=2)
      if (vxs[i]+1 <= vxs[i+1]);
        hline(vxs[i],vxs[i+1],ys,0xff);
  }
} /* fill */  Segue o código acima que estou usando para um probleminha de rasterização, a minha dúvida é a seguinte:  Ao compilar esse código aparece os seguintes erros:   [Linker error] undefined reference to `ordena'      [Linker error] undefined reference to `hline'    [Linker error] undefined reference to `WinMain@16'    ld returned 1 exit status   o que eu entendo sobre esses erros é que faltou definir alguma variável, mas o ordena e o hline não são comando de utilização em C?