# C++ Interface

You can use the C++ interface of ATC by including the public header `include/c++/atc.hpp`, which includes all public header files (located in `include/c++/atc/`). Check out this example for a demonstration.

Because of the use of STL objects, you must ensure that there is ABI stability in between the set-up that you used to compile the ATC library and the user application, i.e. all STL objects must be represented in exactly the same way in-memory. You may (or may not) lose this compatibility by:

- Using different compilers.

- Using different versions of the same compiler.

- Compiling with certain different options. For example, enabling -D_GLIBCXX_DEBUG in GCC changes the ABI of STL objects.

If this becomes an issue, you can either recompile the ATC library using the same set-up, because the source code is publicly available (recommended), or use the less practical C Interface.

Contents:

- General interface
  - atc::compress
  - atc::decompress
  - atc::compress_decompress
  - atc::read_data_type
  - atc::read_decompressed_size
  - atc::calculate_decompressed_size
  - atc::DataType
  - atc::version
- Options
  - atc::Options
  - Enums
  - Slicing
- Results