mirror of
https://github.com/thepigeongenerator/mcaselector-lite.git
synced 2025-12-17 07:35:45 +01:00
seperate out general good C practice from the style guide
This commit is contained in:
13
docs/dev/correct-c.md
Normal file
13
docs/dev/correct-c.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Correct C
|
||||||
|
A monster list about bad code practices for the absolute beginners.
|
||||||
|
Things obviously should be taken with a grain of salt, just stating the obvious.
|
||||||
|
|
||||||
|
- Functions without parameters will be defined with `void` in the parameter list, as opposed to leaving it empty. (e.i. `(void)` rather than `()`)
|
||||||
|
- (public-facing) names mustn't be prefixed with `_`, this is a reserved identifier.
|
||||||
|
- `typedef`s mustn't be suffixed with `_t`, this is a POSIX reserved identifier.
|
||||||
|
- `typedef`s are discouraged, unless the name alias is clear in what it stores. (e.i. `u32` for a 32 bit unsigned integer)
|
||||||
|
- Functions should do one thing, and do it well.
|
||||||
|
- `inline` functions should serve as a replacement for macro definitions, don't put things in here that you wouldn't put in a macro. (block ≤5 lines)
|
||||||
|
- Mark all implementations in a `*.c` file with `static` if there isn't a matching definition in a `*.h` file. (unless there's a clear reason to)
|
||||||
|
- When a function parameter takes in a pointer, and does not modify the pointed at data, a const pointer should be used. (`const int *ptr`)
|
||||||
|
- Try to limit yourself at ~112 columns, but generally avoid overly long lines.
|
||||||
@@ -11,16 +11,10 @@
|
|||||||
- linux / unix-like machine
|
- linux / unix-like machine
|
||||||
|
|
||||||
### style guide
|
### style guide
|
||||||
- parameterless functions should have the `void` parameter.[^cstd]
|
- Code must be written correctly, read [Correct C](./correct-c.md) if more information is required.
|
||||||
- symbols mustn't be prefixed with `_`; this is a C standard reserved symbol.[^cstd]
|
- K&R style braces/[indentation](https://en.wikipedia.org/wiki/Indentation_style)
|
||||||
- typedefs (or anything else for that matter) mustn't be suffixed with `_t`, this is reserved by POSIX.[^cstd]
|
|
||||||
- functions should do one thing, and do that thing well.[^cstd]
|
|
||||||
- K&R style braces/indentation[^wikiindent]
|
|
||||||
- typedefs are discouraged
|
- typedefs are discouraged
|
||||||
- snake_case is used for all user-defined symbols. Macros are often all-uppercase, same goes for enums and other types of compile-time constants.
|
- snake_case is used for all user-defined symbols. Macros are often all-uppercase, same goes for enums and other types of compile-time constants.
|
||||||
- tabs are used for indentation, spaces are used for alignment.
|
- tabs are used for indentation, spaces are used for alignment.
|
||||||
- British spelling is preferred, but not enforced. What is enforced is that British variants of the symbols are available.
|
- British spelling is preferred, but not enforced. What is enforced is that British variants of the symbols are available.
|
||||||
- commits should attempt to convey clearly what is being changed, for the sanity of the maintainer(s).
|
- commits should attempt to convey clearly what is being changed, for the sanity of the maintainer(s).
|
||||||
|
|
||||||
[cstd]: this is a general C practice, included since it is something commonly done incorrectly.
|
|
||||||
[wikiindent]: <https://en.wikipedia.org/wiki/Indentation_style>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user