Objective

  • Semantic annotations for source code
  • Able to integrate with or generate tags for
    • splint
    • doxygen

Syntax

Operators

Operator Meaning
! error
? warning

Attributes

Tag splint doxygen Meaning
in @in @param [in] Input parameter
out @out @param [out] Output parameter
inout @in @out @param[in,out]  
nullin @null - Null input is ok
nullout     Null output is ok
zeroin     Zero input is ok
zeroout     Zero output is ok
pointer     Target is a pointer type

Example

Plain C

extern int
handle_init(void* handle);

Commented C

/*
 * Initialize the handle.
 * 
 * Returns non-zero on error.
 */
extern int
handle_init(
    void* handle /* pointer to handle, can be null */
    );

splint

/* Initialize the handle.
 * 
 * Returns non-zero on error.
 */
extern int
handle_init(
    /*@out*/ /*@null@*/ void* handle /* pointer to handle */
    );

Doxygen

/**
 * Initialize the handle.
 *
 * @return non-zero on error
 */
extern int
handle_init(
    void* handle /**< [out] pointer to handle, can be null */
    );

splint and Doxygen

/**
 * Initialize the handle.
 *
 * @return non-zero on error
 */
extern int
handle_init(
    /*@out*/ /*@null@*/ void* handle /**< [out] pointer to handle, can be null */
    );

GAC

/** Initialize the handle. */
extern int /**< @!notzero */
handle_init(
    void* handle /**< @inout @nullin @?nullout @pointer to handle */
    );

Notes

  • Aim to document only what can't be expressed in code