blob: 3fa640c8f8bfcb518d46d504ac11e92d5fac168d [file] [log] [blame] [view]
<!-- go/cmark -->
<!--* freshness: {owner: 'danilchap' reviewed: '2024-09-02'} *-->
# `.h` and `.cc` files come in pairs
This is an overflow page for [this](/g3doc/style-guide.md#h-cc-pairs)
style rule.
## Example violations
Example violations, which should be avoided in new code:
* Declarations in `path/to/include/foo.h`, definitions in
`path/to/source/foo.cc`. **Fix:** The `.h` and `.cc` files should be
in the same directory.
* Declarations in `foo.h`, definitions in both `foo_bar.cc` and
`foo_baz.cc`. **Fix:** The `.h` and `.cc` files should come in
pairs, so either split `foo.h` into `foo_bar.h` and `foo_baz.h`, or
merge `foo_bar.cc` and `foo_baz.cc` into `foo.cc`.
## Exception for platform-specific code
If the functions in a header file need different implementations for
different platforms, we allow the following arrangement:
* Declarations in `foo.h`.
* A complete set of matching definitions in `foo_win.cc`, another
complete set of matching definitions in `foo_mac.cc`, and so on.
* As per the main rule, these files should all be in the same
directory and in the same build target. The build target should use
platform conditionals to ensure that exactly one of the `.cc` files
are included.