Code Conventions

From VideoLAN Wiki
Revision as of 21:22, 20 February 2008 by Materthron (talk | contribs) (minor improvements)
Jump to navigation Jump to search

Code conventions

Here you find conventions about how the VLC media player developers write their code.

Function naming

All functions are named accordingly: module name (in lower case) + _ + function name (in mixed case, without underscores). For instance: intf_FooFunction. Static functions don't need the module name.

Variable naming

We use Hungarian notation. That is, we have the following prefixes:

  • i_ for integers (sometimes l_ for long integers)
  • b_ for booleans
  • d_ for doubles
  • f_ for floats
  • Generally, we add a p when the variable is a pointer to a type
    • pf_ for function pointers
    • psz_ for a pointer to a string terminated by a zero (C-string)

If a variable has no basic type (for instance a complex structure), don't put any prefix (except p_ if it's a pointer). After one prefix, put an explicit variable name in lower case. If several words are required, join them with an underscore (no mixed case).

Examples:

  • data_packet_t * p_buffer
  • char psz_msg_date[42]
  • int pi_es_refcount[MAX_ES];
  • void (* pf_next_data_packet)( int * )

Macro usage

Static inline is preferred over macros, for example:

 static inline void change_val(int * var, int val)
 {
     *var = val;
 }

is preferred to

 #define CHANGE_VAL(var_name, val) var_name = val;

A few words about white space

Indentation

Never use tabs in the source (nevertheless you're entitled to use them in the Makefile :-).

Use set expandtab under vim or the equivalent under emacs.

Indents are 4 spaces long.

Spaces

Put spaces before and after operators, and inside brackets. For instance:

for( i = 0; i < 12; i++, j += 42 ); 

Braces

Leave braces alone on their lines (GNU style). For instance:

if( i_es == 42 )
{
   p_buffer[0] = 0x12;
}

Comments

ANSI C-style comments /* ... */ are more commonly used for historical reasons, though C++/C99 comments are tolerated, but please don't mix both in the same file.

Qt interface added conventions

Switch statements

Case labels are on the same column as the switch keyword.

Example:

switch( p_item->i_type )
{
case blabla:
    break;
default:
    break;
}