forked from OSchip/llvm-project
58 lines
2.0 KiB
ReStructuredText
58 lines
2.0 KiB
ReStructuredText
.. title:: clang-tidy - bugprone-reserved-identifier
|
|
|
|
bugprone-reserved-identifier
|
|
============================
|
|
|
|
`cert-dcl37-c` and `cert-dcl51-cpp` redirect here as an alias for this check.
|
|
|
|
Checks for usages of identifiers reserved for use by the implementation.
|
|
|
|
The C and C++ standards both reserve the following names for such use:
|
|
|
|
- identifiers that begin with an underscore followed by an uppercase letter;
|
|
- identifiers in the global namespace that begin with an underscore.
|
|
|
|
The C standard additionally reserves names beginning with a double underscore,
|
|
while the C++ standard strengthens this to reserve names with a double
|
|
underscore occurring anywhere.
|
|
|
|
Violating the naming rules above results in undefined behavior.
|
|
|
|
.. code-block:: c++
|
|
|
|
namespace NS {
|
|
void __f(); // name is not allowed in user code
|
|
using _Int = int; // same with this
|
|
#define cool__macro // also this
|
|
}
|
|
int _g(); // disallowed in global namespace only
|
|
|
|
The check can also be inverted, i.e. it can be configured to flag any
|
|
identifier that is _not_ a reserved identifier. This mode is for use by e.g.
|
|
standard library implementors, to ensure they don't infringe on the user
|
|
namespace.
|
|
|
|
This check does not (yet) check for other reserved names, e.g. macro names
|
|
identical to language keywords, and names specifically reserved by language
|
|
standards, e.g. C++ 'zombie names' and C future library directions.
|
|
|
|
This check corresponds to CERT C Coding Standard rule `DCL37-C. Do not declare
|
|
or define a reserved identifier
|
|
<https://wiki.sei.cmu.edu/confluence/display/c/DCL37-C.+Do+not+declare+or+define+a+reserved+identifier>`_
|
|
as well as its C++ counterpart, `DCL51-CPP. Do not declare or define a reserved
|
|
identifier
|
|
<https://wiki.sei.cmu.edu/confluence/display/cplusplus/DCL51-CPP.+Do+not+declare+or+define+a+reserved+identifier>`_.
|
|
|
|
Options
|
|
-------
|
|
|
|
.. option:: Invert
|
|
|
|
If non-zero, inverts the check, i.e. flags names that are not reserved.
|
|
Default is `0`.
|
|
|
|
.. option:: AllowedIdentifiers
|
|
|
|
Semicolon-separated list of names that the check ignores. Default is an
|
|
empty list.
|