diff options
Diffstat (limited to 'org/dergods_style_v0.1.org')
-rw-r--r-- | org/dergods_style_v0.1.org | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/org/dergods_style_v0.1.org b/org/dergods_style_v0.1.org deleted file mode 100644 index 7d27312..0000000 --- a/org/dergods_style_v0.1.org +++ /dev/null @@ -1,104 +0,0 @@ -#+TITLE: Dergods' Style and good practices for C/C++ -#+AUTHOR: Joe -#+DATE: v0.1 -#+LATEX_CLASS: article -#+LATEX_CLASS_OPTIONS: [a4paper] -#+LATEX_HEADER: \usepackage[margin=1.0in]{geometry} -#+LATEX_HEADER: \usepackage[utf8]{inputenc} -#+LATEX_HEADER: \usepackage[dvipsnames]{xcolor} -#+LATEX_HEADER: \definecolor{mypink1}{rgb}{0.858, 0.188, 0.478} -#+LATEX_HEADER: \let\OldTexttt\texttt -#+LATEX_HEADER: \renewcommand{\texttt}[1]{% -#+LATEX_HEADER: \OldTexttt{% -#+LATEX_HEADER: \colorbox{gray}{% -#+LATEX_HEADER: \color{black} #1% -#+LATEX_HEADER: }% -#+LATEX_HEADER: }% -#+LATEX_HEADER: }% - -* Introduction -The following is a description of Dergods' Style code and project -formatting to put in use if you work on Dergods' Realm-related code or if you -just need a personnal good-looking norm to improve your code readablity. It -is heavily inspired by BSD [[https://www.freebsd.org/cgi/man.cgi?query=style&apropos=0&sektion=0&manpath=FreeBSD+12.1-RELEASE+and+Ports&arch=default&format=html][style(9)]], -with some changes. - -* Projects and version control -** Directories - - Working on a *program*: - - All source and header files should be in the ~src/~ directory. - - Necessary media files such as images, sounds, fonts, etc... To the program execution should be in the ~media/~ directory. - - Compilation-generated object files should be located in the ~obj/~ directory. - - Sub-programs or utilities should be located in the ~tools/~ directory. - - An optional man page can be made for the program and should be located in the ~man/~ directory. - - Working on a *library*: - - All source files should be located in the ~src/~ directory. - - Compilation-generated object files should be located in the ~obj/~ directory. - - Non-optional man pages for every major function should be located in the ~man/~ directory. - - Header files should be located in the ~include/~ directory. - -** Files - - *C* sources and headers files should be of the ~.c~ and ~.h~ extensions. - - *C++* sources and header files should be of the corresponding ~.cxx~ / ~.hxx~ or ~.cc~ / ~.hh~ extensions unless the project is Microsoft™ Windows®-compatible only, then extensions should be ~.cpp~ / ~.hpp~. If the project is compatible with any UNIX®-like operating system, ~.cxx~ / ~.hxx~ or ~.cc~ / ~.hh~ should be the prefered extensions. - - Compilation-generated object files should be of the ~.c.o~, ~.cxx.o~, ~.cc.o~ or ~.cpp.o~ corresponding to the correct extensions. - - All files should follow the UNIX® case formatting, including only lowercase alphabetical letters (~a-z~), underscores (~_~) and dots (~.~). Numbers are not allowed. - - Compilation-generated object files should have the same pre-extension basename as its the corresponding source file. - - Working on a *program*, every source file should have its own header file. The pre-extension basenames names should be corresponding. Orphan header files are tolerated. - - Source files should be composed of two parts: - - An index letter followed by an underscore (~_~). An index letters list should be found in an info comment under the main function. The index letter should be consistent. - - A single explicit word describing the file's purpose. - - Example of what a source file should look like: ~g_inventory.cxx~. Its corresponding header file should be ~g_inventory.hxx~ and its compilation-generated object file should be ~g_inventory.cxx.o~. In our case, ~g_~ may be described under the main function as gameplay-related. - - ~.txt~ format is pointless and forbidden. - - Don't forget a LICENSE and a README. Prefer org-mode or markdown for README if the project is going to be published on platforms such as GitLab or GitHub. Therefore extensions should be ~.org~ or ~.md~. You can add a copy of the README without extension properly formatted to be displayed in a terminal or platforms that do not handle org-mode or markdown. - -** Makefile - - The project should always contain at least one makefile. - - There can be more more than one makefile per projects but only one by subdirectories. - - The makefile should be in lowercases only with a capital "M": ~Makefile~. - - The main makefile should contain at least the 3 rules: - - ~all~ - - ~clean~ - - ~install~ - - Makefiles should not relink upon successful compilation. - - The main makefile should contain rules to compile any sub makefiles with the ~tools~ rule. - - All compiled binaries and libraries should be in the root of the project repository, next to the main makefile. - -** Compilation - - The compiler of choice for released binaries should be ~clang~ for C and ~clang++~ for C++. - - The program should compile with ~gcc~ or ~g++~ as well, so test those often. - - C standard of choice should be ~C89~. - - C++ standard of choice should be ~C++98~. - - ~C99~ is tolerated sometimes but ~C89~ should always be this first choice. - - Standard compiler flags should be: - - ~-std=c89~ for C or ~-std=c99~ for C++. - - ~-Wall~ - - ~-Wextra~ - - ~-Werror~ - - ~-pedantic~ - - When including external libraries, additional ~-Wno-~\x X flags may be added to mute external warnings generated by them, for example if one library uses a more recent standard. - - Example: ~-Wno-long-long~ if your library uses ~long long~'s. You will then have to be careful not using ~long long~'s in your code. - - Released binaries should never be compiled with ~-g~\x X options. - - The program should run without any issue with the ~-fsanitize=address~ or ~-fsanitize=memory~ options engaged. Test those often. - - Dynamic linking is prefearable. - -** Editors -No specific editor should be imposed over another, you should always pick the -one you feel the more comfortable with. However some of them are malicious -spyware that should never be recommanded. - -Here is a non-exhaustive list of recommanded or banished programs: - - - *Recommanded*: - - vi® / vim® and variants - - GNU Emacs® - - ee® - - joe® and variants - - *banished*: - - Microsoft™ VSCode® - - Microsoft™ Atom® - - JetBrains™ IntelliJ® variants - -** Version control - - Prefer ~fossil~ over ~git~. Using ~fossil~'s builtin function to mirror repository to ~git~ is fine. - - The repository should only contain files necessary to the compilation, execution or documentation of the program. - - The repository root should not contain anything else than the project's main makefile, LICENSE, README and subdirectories. |