| <html> |
| <head> |
| <meta http-equiv="Content-Type" content=""> |
| <title>Axis2/C Coding Convention</title> |
| </head> |
| |
| <body> |
| <h1>Axis2/C Coding Convention</h1> |
| |
| <p> </p> |
| |
| <h2>1 Naming Conventions </h2> |
| |
| <p></p> |
| |
| <p>Namespace validation is done using <strong>axis2_</strong> prefix. |
| Underscore should be used to separate individuals words in identifiers.</p> |
| |
| <p>All identifiers should be meaningful and abbreviations must be avoided |
| whenever possible.</p> |
| |
| <p></p> |
| |
| <h3> 1.1 Variables</h3> |
| |
| <p>Use meaningful nouns. Use all lower case letters for private & public variables. |
| Use uppercase names for constant. If it is a local variable or a member of a struct, |
| no need to prefix it with axis2_</p> |
| |
| <p>e.g. </p> |
| <pre> |
| int count = 0; |
| char *prefix = NULL; |
| </pre> |
| |
| <h3>1.2 Functions </h3> |
| |
| <p>Function names should always start with the prefix axis2_ except it is a |
| member of a struct.</p> |
| |
| <p></p> |
| |
| <p>e.g. </p> |
| <pre> |
| <p>axis2_om_node_t * axis2_om_node_create(axis2_environment_t *environment);</p> |
| </pre> |
| |
| <p></p> |
| |
| <h3>1.3 Structures and User Defined Data Types </h3> |
| |
| <p>e.g.</p> |
| <pre> |
| typedef struct axis2_om_namespace { |
| char *uri; |
| char *prefix; |
| } axis2_om_namespace_t; |
| </pre> |
| <p></p> |
| |
| <p>Note the _t suffix in the type name.</p> |
| |
| <p></p> |
| |
| <h3>1.4 Macros</h3> |
| |
| <p> </p> |
| |
| <p>Macro names should be in all upper case letter, except that it is a macro |
| to help hide the complexity of the use of function pointers in operation |
| structs or is a type definition.</p> |
| |
| <p>e.g.</p> |
| <pre> |
| <p>#define AXIS2_H</p> |
| <p>#define axis2_error_get_message(error) ((error)->ops->get_message())</p> |
| </pre> |
| <p></p> |
| |
| <h3>1.5 Enumerations</h3> |
| |
| <p>e.g.</p> |
| <pre> |
| typedef enum axis2_status_codes { |
| AXIS2_FAILURE = 0, |
| AXIS2_SUCCESS |
| } axis2_status_codes_t; |
| </pre> |
| <p></p> |
| |
| <h2>2 Indentation</h2> |
| |
| <p> </p> |
| |
| <p>Indentation rules are defined in terms of GNU indent options:</p> |
| |
| <p>indent -nbad -bap -nbc -bbo -bl -bli0 -bls -ncdb -nce -cp1 -cs -di2 -ndj |
| -nfc1 -nfca -hnl -i4 -ip5 -lp -pcs -nprs -psl -saf -sai -saw -nsc -nsob -ts4 |
| -nut -nbfda </p> |
| |
| <p></p> |
| |
| <h2>3 Comments</h2> |
| |
| <p><a href="http://www.stack.nl/~dimitri/doxygen/docblocks.html">Doxygen |
| style comments</a> should be used to help auto generate API documentation. |
| All structs as well as functions including parameters and return types should |
| be documented.</p> |
| |
| <p></p> |
| |
| <h2>4 Function Parameters and Return Value Conventions</h2> |
| |
| <p>Each function should be passed a pointer to an instance of |
| axis2_environment_t struct as the first parameter. If the function is tightly |
| bound to a struct, the second parameter is a pointer to an instance of that |
| struct.</p> |
| |
| <p>Functions returning pointers should return NULL in case of an error. The |
| developer should make sure to set the relavant error code in environment's |
| error struct.</p> |
| |
| <p>Functions returning none pointer values should always return AXIS2_FAILURE |
| status code on error whenever possible, or some defined error value (in case |
| of returning a struct may be). A relavant error code must also be set in |
| environment's error struct.</p> |
| |
| <h2>5 Include Directives</h2> |
| <p>It is prefereable to include header files in following fashion:</p> |
| |
| <pre> |
| <standard header files> |
| <other system headers> |
| "local header files" |
| </pre> |
| |
| |
| |
| </body> |
| </html> |