cflow - Linux


cflow is a utility that analyzes C code and generates a graphical representation of the function call graph. It can be used to visualize the structure and relationships within a C program, making it easier to understand and navigate large and complex codebases.


cflow [options] file.c


  • -a: Analyze all files in the current directory.
  • -D: Generate dependency information for make.
  • -f : Output the graph to the specified file.
  • -g: Generate a graph in the dot format for use with Graphviz.
  • -I : Include the specified path in the search for header files.
  • -L : Set the recursion depth limit for function calls (default: 1).
  • -m: Generate a metric summary for each function.
  • -M : Specify the type of graph to generate (options: call, calltree, caller).
  • -p: Generate a list of all functions and their calls.
  • -s: Generate a summary of the graph.
  • -x: Print cross-reference information.


Simple example:

cflow example.c

Generate a dot graph for Graphviz:

cflow -g example.c

Set the recursion depth limit:

cflow -L 5 example.c

Generate a metric summary:

cflow -m example.c

Common Issues

  • Missing header files: If cflow cannot find the necessary header files, it will report errors. Ensure that all required headers are available in the search path.
  • Infinite recursion: If a function calls itself recursively in an endless loop, cflow will not terminate. Use the -L option to limit recursion depth.
  • Large graphs: Analyzing large codebases can result in very large graphs. Consider using the -s option to generate a summary or setting the -L option to a lower value.


cflow can be integrated into build scripts or continuous integration pipelines to automatically generate graphs for code analysis and documentation purposes. It can also be used as a tool for debugging and understanding complex code structures.

Related Commands

  • dot: Graphviz tool for visualizing graphs.
  • gprof: Profiling tool that provides insight into program execution.
  • callgrind: Call graph analyzer for profiling and debugging.