mirror of
https://github.com/isocpp/CppCoreGuidelines.git
synced 2024-03-22 13:30:58 +08:00
SF.11, Header files should be self-contained (#1181)
* SF.11 Header files should be self-sufficient added * PR feedback addressed * explain more * update reason baed on PR feedback * add VS code dir to .gitignore * more PR feedback
This commit is contained in:
parent
85db0de16c
commit
e5f28e4095
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -4,3 +4,6 @@ node_modules
|
|||
_site
|
||||
scripts/python/__pycache__
|
||||
scripts/python/*.pyc
|
||||
|
||||
# VS Code
|
||||
.vs/
|
|
@ -18207,6 +18207,7 @@ Source file rule summary:
|
|||
* [SF.8: Use `#include` guards for all `.h` files](#Rs-guards)
|
||||
* [SF.9: Avoid cyclic dependencies among source files](#Rs-cycles)
|
||||
* [SF.10: Avoid dependencies on implicitly `#include`d names](#Rs-implicit)
|
||||
* [SF.11: Header files should be self-contained](#Rs-contained)
|
||||
|
||||
* [SF.20: Use `namespace`s to express logical structure](#Rs-namespace)
|
||||
* [SF.21: Don't use an unnamed (anonymous) namespace in a header](#Rs-unnamed)
|
||||
|
@ -18614,6 +18615,27 @@ This rule against implicit inclusion is not meant to prevent such deliberate agg
|
|||
Enforcement would require some knowledge about what in a header is meant to be "exported" to users and what is there to enable implementation.
|
||||
No really good solution is possible until we have modules.
|
||||
|
||||
### <a name="Rs-contained"></a>SF.11: Header files should be self-contained
|
||||
|
||||
##### Reason
|
||||
|
||||
Usability, headers should be simple to use and work when included on their own.
|
||||
Headers should encapsulate the functionality they provide.
|
||||
Avoid clients of a header having to manage that header's dependencies.
|
||||
|
||||
##### Example
|
||||
|
||||
#include "helpers.h"
|
||||
// helpers.h depends on std::string and includes <string>
|
||||
|
||||
##### Note
|
||||
|
||||
Failing to follow this results in difficult to diagnose errors for clients of a header.
|
||||
|
||||
##### Enforcement
|
||||
|
||||
A test should verify that the header file itself compiles or that a cpp file which only includes the header file compiles.
|
||||
|
||||
### <a name="Rs-namespace"></a>SF.20: Use `namespace`s to express logical structure
|
||||
|
||||
##### Reason
|
||||
|
|
Loading…
Reference in New Issue
Block a user