Difference between revisions of "C programming/House of Technology C coding policy"
From Teknologisk videncenter
m (→Example) |
m (→Example) |
||
Line 81: | Line 81: | ||
<source lang=c> | <source lang=c> | ||
− | /************************* | + | /********************************************************** |
− | Abbreviation table | + | Abbreviation/explanation table |
− | ================== | + | ============================== |
cipher = Crypt/decrypt algorithm | cipher = Crypt/decrypt algorithm | ||
Line 89: | Line 89: | ||
cleartext = The unencrypted message | cleartext = The unencrypted message | ||
crib = A known/hacked/guessed part of cleartext | crib = A known/hacked/guessed part of cleartext | ||
− | *************************/ | + | **********************************************************/ |
Revision as of 10:31, 13 June 2012
Naming
Variable names
- All variable names should be in lower case.
- All variable names should describe purpose and content.
- Use _ (underscore) as space.
- Use int timer0_instance_counter instead of int timer0InstanceCounter
- If you abbreviate and use tim0_inst_cnt remember to list the abbreviations in the Abbreviation Table.
- Use int timer0_instance_counter instead of int timer0InstanceCounter
Function names
- All function names should be in lower case.
- All function names should describe purpose and function.
- Use _ (underscore) as space.
- Use galaxy_soarsystem_planet approach instead of planet_solarsystem_galaxy
best approach | dont use |
---|---|
timer0_start() | start_timer0() |
timer0_stop() | stop_timer0() |
timer0_init() | init_timer0() |
timer1_start() | start_timer1() |
timer1_stop() | stop_timer1() |
timer1_init() | init_timer1() |
Abbreviations
If abbreviations are used - use logical abbreviations and make a abbreviation table
/*Abbreviation Table
disp == display
dsp == digital signal processor
tim == timer
inst == instance
cnt == counter
...
*/
Programming style
Indents
Use K&R or Allman indents. But do it consistently.
K&R example
if (x == y) {
x++;
foo();
} else {
x--;
bar();
}
Allman
if (x == y)
{
x++;
foo();
}
else
{
x--;
bar();
}
Documenting
Commenting code
Write what the purpose of the code is - not what the code do.
Example
The example below is a codesnip of a brute force decryption attack program, which searches all keys until it find a known cleartext message - known as a crib in the crypted message known as the ciphertext.
- Note
- the comments explains the purpose of the code - not how the code works. A peer progammer should know how the code works and need to know what the purpose of the code is.
/**********************************************************
Abbreviation/explanation table
==============================
cipher = Crypt/decrypt algorithm
ciphertext = The crypted message
cleartext = The unencrypted message
crib = A known/hacked/guessed part of cleartext
**********************************************************/
/* Get memory to store the ciphertext */
ciphertext_size=strlen(argv[2]);
ciphertext = (int *) malloc(ciphertext_size * sizeof(int));
if ( cipher == NULL ) {
err(2,"Can't allocate memory for ciphertext message.");
exit(2);
}
/* Read the Ciphertext - of size Crib - into memory */
for (i=0; i < ciphertext_size; i++) {
if ((cipher[i] = fgetc(fpin)) == EOF) {
err(3,"Can't read from cypher file. (Perhaps it's shorter than the Crib");
exit(3);
}
}
/* Get Crib message */
crib = (int *) malloc(ciphertext_size*sizeof(int));
if ( crib == NULL ) {
err(4,"Can't allocate memory for crib message.");
exit(4);
}
Module headers
.c files
Do not use version numbers i modules. Note date/auther and description of change in the modification log.
/**************************************************************************
# #
## ## ###### ##### #### ## # # ##### ###### ####
# # # # # # # # # # # ## # # # # #
# # # ##### # # # # # # # # # ##### #
# # # ##### # ###### # # # # # #
# # # # # # # # # # ## # # # #
# # ###### # # #### # # # # # ###### ####
***************************************************************************
Author..: name <mail@address>
Company.: House of Technology at Mercantec ( http://www.mercantec.dk )
date....: 2012 Nov. 13
***************************************************************************
Abstract: Brief description (two to ten lines)
Purpose.: The purpose of the module. (one or two lines)
***************************************************************************
Cavets..: Description of problems and future extensions (TODO's)
***************************************************************************
Modification log:
***************************************************************************
License: Free open software but WITHOUT ANY WARRANTY.
Terms..: see http://www.gnu.org/licenses
***************************************************************************/