title: C: main is normally a non-static function
body: <p>I have this piece of code here and found this <a href="https://stackoverflow.com/questions/24609763/main-is-normally-a-non-static-function-error">question</a> so I guess it's about brackets. I even showed it to a tutor walking around, but he didn't have an idea either and said it actually looks ok.</p>
  <p>Complete error message is:</p>
  <blockquote>
  <p>buch.c: In function 'insert_at_begin':</p>
  <p>buch.c: warning: 'main' is normally a non-static function [-Wmain]</p>
  <p>buch.c157.1: error: expected declaration or statement at end of input }</p>
  <p>buch.c157.1: warning control reaches end of non-void function [-Wreturn-type] }</p>
  </blockquote>
  <p>NOTE: main function was actually given beforehand and shouldn't be changed. Also, a few functions were given in an extra file.</p>
  <p>Code is as follows. (few functions were given in an extra file)</p>
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &quot;introprog_structs_lists_input.h&quot;
  
  #define MAX_STR 255
  
  /* Bewirkt, dass statt 'struct _element' auch 'element' verwendet werden kann. */
  typedef struct _element element; 
  
  /* Bewirkt, dass statt 'struct _list' auch 'list' verwendet werden kann. 
   * Hier in einem geschrieben, so dass man auch 'list' innerhalb der 
   * struct-Definition selbst verwenden kann.  
   */
  typedef struct _list { /* Separater Wurzelknoten */
      element *first;    /* Anfang/Kopf der Liste */
      int count;         /* Anzahl der Elemente */
  } list;
  
  struct _element {
  
      char title[MAX_STR];
      char author[MAX_STR];
      int year;
      long long int isbn;
      element *next;
  };/* HIER struct element implementieren. */
  
  /* Fuege ein Element am Anfang der Liste an, sodass das neue Element immer das
   * erste Element der Liste ist.
   * Wenn die Liste leer ist soll das Element direkt an den Anfang platziert
   * werden.
   *
   * first    - Erstes Element (bzw. Anfang) der Liste
   * new_elem - Neues Element das in die Liste eingefuegt werden soll.
   *
   * Gib einen Pointer auf den neuen Anfang der Liste zurueck.
   */
  element *insert_at_begin(element *first, element *new_elem) {
      
      
      if(first){
          new_elem-&gt;next = first;
          first = new_elem;
          //first-&gt;count = count++;
          return first;/* HIER implementieren. */
  }
  
  /* Kreiere ein neues Element mit dynamischem Speicher.
   *
   
   
   * title     - Der Titel des Buches
   * author    - Autor des Buches
   * year      - Erscheinungsjahr des Buches
   * isbn      - ISBN des Buches
   *
   * Gib einen Pointer auf das neue Element zurueck.
   */
  element *construct_element(char *title, char* author, int year, long long int isbn) {
      //element *new = malloc(sizeof(element);
      element *new = (element*) calloc(1, sizeof(element));/* HIER implementieren. */
      strncpy(new-&gt;title, title, MAX_STR-1);
      strncpy(new-&gt;author, author, MAX_STR);
      new-&gt;year = year;
      new-&gt;isbn = isbn;
      new-&gt;next = NULL;
      return new;
  }
  
  /* Gib den der Liste und all ihrer Elemente zugewiesenen Speicher frei. */
  void free_list(list *alist) {
      
      element *elem = alist -&gt; first;
      element *alt;
      while (elem != NULL) {
          alt = elem;
          elem = elem -&gt; next;
          free(alt);
      }
      free(elem);
      free(alist);/* HIER implementieren. */
  }
  
  /* Lese die Datei ein und fuege neue Elemente in die Liste ein 
   * _Soll nicht angepasst werden_
   * */
  void read_list(char* filename, list *alist) {
      element* new_elem;
  
      char* title;
      char* author;
      int year;
      long long int isbn;
      read_line_context ctx;
      open_file(&amp;ctx, filename);
      while(read_line(&amp;ctx, &amp;title, &amp;author, &amp;year, &amp;isbn) == 0) {
          new_elem = construct_element(title, author, year, isbn);
          alist-&gt;first = insert_at_begin(alist-&gt;first, new_elem);
          alist-&gt;count++;
      }
  }
  
  /* Erstelle die Liste:
   *  - Weise ihr dynamischen Speicher zu 
   *  - Initialisiere die enthaltenen Variablen
   * _Soll nicht angepasst werden_
   */
  list* construct_list() {
      list *alist = malloc(sizeof(list));
      alist-&gt;first = NULL;
      alist-&gt;count = 0;
      return alist;
  }
  
  /* Gib die Liste aus:
   * _Soll nicht angepasst werden_
   */
  void print_list(list *alist) {
      printf(&quot;Meine Bibliothek\n================\n\n&quot;);
      int counter = 1;
      element *elem = alist-&gt;first;
      while (elem != NULL) {
          printf(&quot;Buch %d\n&quot;, counter);
          printf(&quot;\tTitel: %s\n&quot;, elem-&gt;title);
          printf(&quot;\tAutor: %s\n&quot;, elem-&gt;author);
          printf(&quot;\tJahr:  %d\n&quot;, elem-&gt;year);
          printf(&quot;\tISBN:  %lld\n&quot;, elem-&gt;isbn);
          elem = elem-&gt;next;
          counter++;
      }
  }
  
  /* Main Funktion
   * _Soll nicht angepasst werden_
   */
  int main(int argc, char** argv) {
      list *alist = construct_list();
      read_list(argc&gt;1?argv[1]:&quot;buecherliste.txt&quot;, alist);
      print_list(alist);
      free_list(alist);
      return 0;
  }
  </code></pre>
  <p>Really starting to drive me nuts, hope someone can help.</p>