ignore auto generated files from git

add file ".gitignore"
Flatten nested functions

Reason:
  Some compiler can't compile nested functions. e.g. clang, visual c

How do I flatten nested functions:

  Denote "R" whether the nested function reads a outter-scope var.

  e.g.,
    void outer() {
      int scope_var;
      int inner() {
        return scope_var;
      }
    }
  Condition "R" is "True" for function "inner".

  Denote "P" whether the nested function is passed elsewhere as a function pointer.

  e.g.,
    void outer() {
      void inner() {}
      void (* pointer)() = inner;
    }
  Condition "P" is "True" for function "inner".

  Change it to static function if "not R"
  Change it to macro           if "R and (not P)"
  if "R and P", change it to a static function but passing an extra argument
"scope_ptr" pointing to a structure with outter-scope variable to it

  an example for "R and P":
    /* before */
    void outer() {
      int scope_var=0;
      int inner() {
        return scope_var;
      }
      darray_forall(inner); // it calls "inner" many times
    }
    /* after */
    static int inner(int *scope_ptr) {
      return *scope_ptr;
    }
    void outer() {
      int scope_var=0;
      darray_forall(inner, &scope_var);
    }

  Things turn complicated when a nested function calls another nested
function. Luckily it happens not often. :)