Skip to content

Commit 56ea406

Browse files
authored
Merge pull request MicrosoftDocs#3614 from ktoliver/public-3187
[PUBLIC_MOVE] commit from public PR 3187
2 parents 59c35c5 + fa027b2 commit 56ea406

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

docs/code-quality/c6389.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: C6389
3+
description: "Describes the Microsoft C/C++ code analysis warning C6389, its causes, and how to address it."
4+
ms.date: 06/09/2021
5+
f1_keywords: ["C6389"]
6+
helpviewer_keywords: ["C6389"]
7+
---
8+
9+
# C6389: MARK_INTERNAL_OR_MISSING_COMMON_DECL
10+
11+
This check is intended to help reduce the visibility of certain symbols and to modularize the code. In multi-file C++ projects, each declaration should be either local to a C++ file (part of the anonymous namespace) or declared in a common header file that's included by multiple C++ files.
12+
13+
When this check flags a declaration, either it should be moved to an anonymous namespace or a forward declaration should be moved to a header file, depending on the scope of the symbol.
14+
15+
The rule is an experimental rule that must be explicitly enabled in a rule set file to work. For more information about rule sets, see [Use rule sets to group code analysis rules](/visualstudio/code-quality/using-rule-sets-to-group-code-analysis-rules).
16+
17+
## Example
18+
19+
```cpp
20+
// A.h
21+
struct X;
22+
```
23+
24+
```cpp
25+
// A.cpp
26+
#include "A.h"
27+
28+
// Not flagged, declared in a header file.
29+
struct X { int x; };
30+
31+
struct Y { double y; }; // warning: Move 'Y' to anonymous namespace or put a forward declaration in a common header included in this file.
32+
33+
void f(); // warning: Move 'f' to anonymous namespace or put a forward declaration in a common header included in this file.
34+
```
35+
36+
One way to resolve these issues is to move `struct Y` into an anonymous namespace, and move the declaration of `f` into a header:
37+
38+
```cpp
39+
// A.h
40+
struct X;
41+
void f();
42+
```
43+
44+
```cpp
45+
// A.cpp
46+
#include "A.h"
47+
48+
// Not flagged, declared in a header file.
49+
struct X { int x; };
50+
51+
namespace {
52+
struct Y { double y; };
53+
} // anonymous namespace
54+
55+
// Not flagged, declared in a header file.
56+
void f();
57+
```

docs/code-quality/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,8 @@
462462
href: ../code-quality/c6387.md
463463
- name: C6388
464464
href: ../code-quality/c6388.md
465+
- name: C6389
466+
href: ../code-quality/c6389.md
465467
- name: C6400
466468
href: ../code-quality/c6400.md
467469
- name: C6401

0 commit comments

Comments
 (0)