Skip to content


Subversion checkout URL

You can clone with
Download ZIP


Document the C/C++ code guidelines #1606

merged 1 commit into from

2 participants


This is a distillation of a discussion on the mailing list regarding C/C++ extensions.


+1 on this provided we are happy to take a flexible approach on keeping interface and core C/C++ code separate, as in some cases it is more sensible to keep them together, e.g. if the core code is very simple, or if the core code needs access to a reference-counted python object for longer than a single C/C++ function call.


@ianthomas23: Agreed. Exceptions can always be made when appropriate.

@mdboom mdboom merged commit 1c3836d into matplotlib:master

1 check passed

Details default The Travis build passed
@mdboom mdboom deleted the mdboom:cxx_extension_policy branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Dec 17, 2012
  1. @mdboom
This page is out of date. Refresh to see the latest.
Showing with 19 additions and 0 deletions.
  1. +19 −0 doc/devel/coding_guide.rst
19 doc/devel/coding_guide.rst
@@ -105,6 +105,25 @@ Installation
ones, make sure the new files included in the match patterns in
:file:``, and/or in `package_data` in ``.
+C/C++ extensions
+* Extensions may be written in C or C++.
+* Code style should conform to PEP7 (understanding that PEP7 doesn't
+ address C++, but most of its admonitions still apply).
+* Interfacing with Python may be done either with the raw Python/C API
+ or Cython. Use of PyCXX is discouraged for new code.
+* Python/C interface code should be kept separate from the core C/C++
+ code. The interface code should be named `FOO_wrap.cpp`.
+* Header file documentation (aka docstrings) should be in Numpydoc
+ format. We don't plan on using automated tools for these
+ docstrings, and the Numpydoc format is well understood in the
+ scientific Python community.
Style guide
Something went wrong with that request. Please try again.