2020-06-03 00:15:29 +00:00
|
|
|
#+TITLE: k9core coding style
|
|
|
|
#+AUTHOR: the k9core team
|
2020-06-02 22:15:09 +00:00
|
|
|
* k9core coding style
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: k9core-coding-style
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Pretty similar to the GNU code standards.
|
|
|
|
|
|
|
|
** Functions definition
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: functions-definition
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Functions have to begin with return type, breakline, and functionname,
|
|
|
|
also brackets will be in a new line:
|
|
|
|
|
|
|
|
#+BEGIN_SRC C
|
|
|
|
int
|
|
|
|
main(int argc, char *argv[])
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
** Line length
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: line-length
|
|
|
|
:END:
|
|
|
|
|
|
|
|
A line of code must no exced 75 characters. If it exceeds, do a
|
|
|
|
breakline:
|
|
|
|
|
|
|
|
#+BEGIN_SRC C
|
|
|
|
|
|
|
|
int
|
|
|
|
a_very_long_function(int a_very_long_parameter, int
|
|
|
|
another_very_long_parameter);
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
** Statements
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: statements
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Do not do declarations inside an if block. Declarations inside while
|
|
|
|
loop are OK.
|
|
|
|
|
|
|
|
#+BEGIN_SRC C
|
|
|
|
int fd;
|
|
|
|
if((fd = open("file", O_CREAT)) == -1) /* Don't do this */
|
|
|
|
{
|
|
|
|
/* Whatever */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Do this instead */
|
|
|
|
|
|
|
|
int fd = open("file", O_CREAT);
|
|
|
|
if(fd == -1)
|
|
|
|
{
|
|
|
|
/* Whatever */
|
|
|
|
}
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
** Do not include .c files
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: do-not-include-.c-files
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Just don't.
|
|
|
|
|
|
|
|
** Comments
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: comments
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Do not use C++ style comments. Comments at beggining of the line should
|
|
|
|
explain what the line does. not how it does. Comments at the end of the
|
|
|
|
line must be explanations of something:
|
|
|
|
|
|
|
|
#+BEGIN_SRC C
|
|
|
|
// This is a wrong comment
|
|
|
|
|
|
|
|
/* This is a correct comment */
|
|
|
|
|
|
|
|
/* Makes a syscall giving a file descriptor... */
|
|
|
|
|
|
|
|
fd = open("whatever",O_RDONLY); /* WRONG */
|
|
|
|
|
|
|
|
/* Creates a file descriptor on the file whatever */
|
|
|
|
|
|
|
|
fd = open("whatever",O_RDONLY); /* Yes */
|
|
|
|
|
|
|
|
/* 420 is 644 in decimal */ <- WRONG
|
|
|
|
chmod("whatever",420)
|
|
|
|
|
|
|
|
chmod("whatever",420) /* 420 is 644 in decimal
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
** For commiters
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: for-commiters
|
|
|
|
:END:
|
|
|
|
|
|
|
|
Commiters may or may not be anonymous. If you want to be anonymous. Set
|
|
|
|
whatever you want to git name and git email.
|
|
|
|
|
|
|
|
If you don't want to be anonymous, you should sign your commits using
|
|
|
|
gpg. See
|
2020-06-03 00:15:29 +00:00
|
|
|
[[this][https://docs.gitlab.com/ee/user/project/repository/gpg_signed_commits/]]
|
|
|
|
|
|
|
|
** C Standard
|
|
|
|
:PROPERTIES:
|
|
|
|
:CUSTOM_ID: c-standard
|
|
|
|
:END:
|
|
|
|
Development on k9core is to be done in C99 with possible backwards compatiability with ANSI C.
|
|
|
|
Using c11 or gnu11 or something like that is to be avoided.
|
|
|
|
|
|
|
|
*** Examples
|
|
|
|
This is okay to use:
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
#include <stdio.h>
|
|
|
|
/* Valid C99 */
|
|
|
|
|
|
|
|
int
|
|
|
|
main
|
|
|
|
{
|
|
|
|
puts("This will be executed");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
This is not:
|
|
|
|
#+BEGIN_SRC c
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdnoreturn.h>
|
|
|
|
|
|
|
|
/* This is not valid c99 */
|
|
|
|
|
|
|
|
noreturn void
|
|
|
|
stop(int i)
|
|
|
|
{
|
|
|
|
if(i > 0) exit(i);
|
|
|
|
else exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
main()
|
|
|
|
{
|
|
|
|
puts("This will be executed");
|
|
|
|
stop(0);
|
|
|
|
puts("This will not be executed");
|
|
|
|
}
|
|
|
|
#+END_SRC
|
|
|
|
|