Start here

Home
About Klocwork
What's new
Fixed issues
Release notes
Installation

Reference

C/C++ checkers
Java checkers
C# checkers
MISRA C 2004 checkers
MISRA C++ 2008 checkers
MISRA C 2012 checkers
MISRA C 2012 checkers with Amendment 1
Commands
Metrics
Troubleshooting
Reference

Product components

C/C++ Integration build analysis
Java Integration build analysis
Desktop analysis
Refactoring
Klocwork Static Code Analysis
Klocwork Code Review
Structure101
Tuning
Custom checkers

Coding environments

Visual Studio
Eclipse for C/C++
Eclipse for Java
IntelliJ IDEA
Other

Administration

Project configuration
Build configuration
Administration
Analysis performance
Server performance
Security/permissions
Licensing
Klocwork Static Code Analysis Web API
Klocwork Code Review Web API

Community

View help online
Visit RogueWave.com
Klocwork Support
Rogue Wave Videos

Legal

Legal information

Creating and testing C/C++ KAST custom functions

A KAST custom function is written using a simple C API. A custom function defines one or more extensions to the KAST language in the form of either custom predicates or getter methods. In either case, the custom functions perform specific queries or interactions with the AST that represents your source module.

You'll typically want to create a KAST custom function if you're attempting to write a KAST checker that requires conditions that aren't available through Klocwork's standard built-in functions. For a list of built-in functions, launch Checker Studio, and go to Help > Help topics > KAST reference > C/C++ KAST built-in functions reference . Always make sure you consult the latest list of built-in functions to avoid recreating something that's already available.

Once a custom function is coded, you simply call it in your KAST expression and specify in your checker definition the name of the library that contains the function. The KAST API is documented in Klocwork C/C++ AST API Reference.

The first part of this article explains the standard workflow used when writing and testing a custom checker, and describes a method of customizing that template workflow for greater efficiency. The rest of the article explains examples of techniques used in custom functions. The examples start with a very simple custom function, and progress through more complex functions:

  • "Hello world"
  • modifying error messages
  • listing classes and members
  • accessing inheritance information
  • traversing the AST tree
  • applying traversal to the KAST custom function
  • designing a 'descendant::' search
Note: Make sure that any custom functions are built on the same type of machine (OS distribution and version) as the target machines on which the checker will be deployed. For Unix systems, the machine on which the checker is compiled must use a compatible version of GLibC as the machine on which the checker is to be deployed.