It is not required for your program to define with nemo_main(). There are cases where the user needs more control. An example of this is the falcON N-body code in $NEMO/use/dehnen/falcON. A header file (see e.g. inc/main.h) now defines main, instead of through the NEMO library:
// in main.h: extern string defv[]; extern string usage; namespace nbdy { char version [200]; // to hold version info extern void main(); // to be defined by user }; int main(int argc, char *argv[]) // ::main() { snprintf(nbdy::version,200,"VERSION=" /*..*/ ); // write version info initparam(argv,defv); // start NEMO nbdy::main(); // call nbdy::main() finiparam(); // finish NEMO }
and the application includes this header file, and defines the keyword list in the usual way :
// in application.cc #include <main.h> string defv[] = { /*...*/, nbdy::version, NULL }; // use version info string usage = /*...*/ ; void nbdy::main() { /*...*/ } // nbdy::main()