Startseite/Dokumentation/Coding-Standards/CERT-C-Konformität nahtlos erreichen mit CppDepend

CERT-C-Konformität nahtlos erreichen mit CppDepend

CERT-C-Konformität nahtlos erreichen mit CppDepend

In der heutigen wettbewerbsintensiven Softwareentwicklungslandschaft ist die Pflege von hochwertigem und sicherem Code unerlässlich. Der Cert-C-Coding-Standard dient als Richtlinie für die Erstellung zuverlässiger und sicherer C-Anwendungen. Aber wie können Entwickler Cert-C-Compliance in ihren Projekten effizient erreichen?

Hier kommt CppDepend ins Spiel, ein umfassendes Werkzeug, das speziell dafür entwickelt wurde, Ihnen bei der Bewältigung der Komplexität des Cert-C-Standards zu helfen. Durch den Einsatz statischer Analysetechniken führt CppDepend Sie nicht nur zur Compliance, sondern befähigt Sie auch, die allgemeine Codequalität und -sicherheit zu verbessern.

Um CERT-C-Standards zu lernen, können Sie drucken: Dokumentation zum SEI CERT C Coding Standard von der Carnegie Mellon University.

Verwenden von CERT-C-Regeln in CppDepend

Wenn Sie ein neues CppDepend-Projekt erstellen, erscheint ein Pop-up, das alle Coding-Standards anzeigt, die Sie in Ihre Analyse aufnehmen möchten. Um Cert-C-Coding-Standards einzuschließen, aktivieren Sie die Cert-Option und wählen Sie Cert C.

CERT-C-Regelkonfiguration

Nach der Analyse Ihres Projekts navigieren Sie zum Abschnitt Queries and Rules Explorer und wählen im linken Menü die Cert-C-Regeln (im Bild unten rot hervorgehoben). Dadurch werden rechts alle zugehörigen Cert-C-Regeln angezeigt. Beim Klicken auf eine Regel werden automatisch die entsprechende CQLinq-Abfrage und der relevante Quellcode generiert. Zusätzlich bietet der Abschnitt Metrics View eine Visualisierung des Ortes und der Bedeutung des Problems.

CERT-C-Regeln-Explorer

Einbindung der CERT-C-Regeln in den HTML-Bericht

Um die Cert-C-Regeln in den generierten HTML-Bericht aufzunehmen (verfügbar in der DevOps Edition), klicken Sie einfach mit der rechten Maustaste auf die Cert-C-Gruppe und wählen Sie "List Code Queries of this Group in a dedicated section in Report".

CERT-C-Regeln im Bericht

Präprozessor (PRE)

PRE30-C: Do not create a universal character name through concatenation:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_ucn_escape_incomplete"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

PRE31-C: Avoid side effects in arguments to unsafe macros:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="bugprone-macro-repeated-side-effects"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Deklarationen und Initialisierung

DCL30-C: Declare objects with appropriate storage durations:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="danglingLifetime"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

DCL31-C: Deklarieren Sie Bezeichner vor ihrer Verwendung:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="err_missing_type_specifier"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

DCL37-C:Do not declare or define a reserved identifier:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_pp_macro_is_reserved_id" select
new { issue,issue.FilePath,Line=issue.BeginLine}

DCL41-C: Do not declare variables inside a switch statement before the first case label:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.Type=="Rule6-4-4"
select new { issue,issue.FilePath,Line=issue.BeginLine}

Ausdrücke (Exp)

EXP30-C: Do not depend on the order of evaluation for side effects:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_unsequenced_mod_use" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP32-C: Do not access a volatile object through a nonvolatile reference:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang"
&& issue.Type=="err_typecheck_convert_incompatible_volatile"  select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP33-C: Lesen Sie keinen nicht initialisierten Speicher:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && (issue.Type=="uninitvar" || issue.Type=="uninitdata") select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP34-C: Dereferenzieren Sie keine Nullzeiger:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="nullPointer"  select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP35-C: Do not modify objects with temporary lifetime:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang"
&& issue.Type=="err_typecheck_expression_not_modifiable_lvalue"  select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP36-C: Do not cast pointers into more strictly aligned pointer types:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_cast_align" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP37-C: Call functions with the correct number and type of arguments:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="err_typecheck_call_too_many_args" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP39-C: Do not access a variable through a pointer of an incompatible type:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="invalidPointerCast" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP40-C: Ändern Sie keine konstanten Objekte:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="err_typecheck_convert_incompatible_const" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP44-C: Do not rely on side effects in operands to sizeof,\_Alignof, or \_Generic:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_side_effects_unevaluated_context"
&& issue.Description.Contains(("lambda")) select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP45-C:Do not perform assignments in selection statements:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_condition_is_assignment" select
new { issue,issue.FilePath,Line=issue.BeginLine}

EXP46-C. Do not use a bitwise operator with a Boolean-like operand:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0**
from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_precedence_bitwise_rel" select
new { issue,issue.FilePath,Line=issue.BeginLine}

Gleitkomma (FLP)

FLP30-C:Do not use floating-point variables as loop counters:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="cert-flp30-c"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

FLP34-C: Ensure that floating-point conversions are within range of the new type:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_impcast_float_integer"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Array (ARR)

ARR30-C. Do not form or use out-of-bounds pointers or array subscripts:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="arrayIndexOutOfBounds"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

ARR36-C: Do not subtract or compare two pointers that do not refer to the same array:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="comparePointers"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

ARR39-C: Do not add or subtract a scaled integer to a pointer:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_ptr_arith_exceeds_bounds"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Zeichen und Zeichenfolgen (STR)

STR30-C: Do not attempt to modify string literals:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="stringLiteralWrite"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

STR34-C: Cast characters to unsigned char before converting to larger integer sizes:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="bugprone-signed-char-misuse"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Speicherverwaltung (MEM)

MEM30-C: Greifen Sie nicht auf freigegebenen Speicher zu:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="nullPointer"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

MEM31-C. Free dynamically allocated memory when no longer needed:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang" && issue.Type=="warn_mismatched_delete_new"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Ein-/Ausgabe (FIO)

FIO38-C: Kopieren Sie kein FILE-Objekt:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="cert-fio38-c"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

FIO42-C: Close files when they are no longer needed:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="resourceLeak"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Umgebung (ENV)

ENV33-C: Rufen Sie system() nicht auf:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="CppCheck" && issue.Type=="nullPointer"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Signale (SIG)

SIG30-C: Call only asynchronous-safe functions within signal handlers:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="bugprone-signal-handler"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Fehlerbehandlung (ERR)

ERR34-C: Detect errors when converting a string to a number:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="cert-err34-c"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Nebenläufigkeit (CON)

CON36-C. Wrap functions that can spuriously wake up in a loop:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="bugprone-spuriously-wake-up-functions"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Sonstiges (MSC)

MSC30-C: Do not use the rand() function for generating pseudorandom numbers:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="cert-msc30-c"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

MSC32-C: Properly seed pseudorandom number generators:

Dieser Coding-Standard wird mit der folgenden Abfrage berechnet:

warnif **count** > **0** from issue in **ImportedIssues** where issue.ToolName=="Clang-Tidy" && issue.Type=="cert-msc32-c"
select new { issue, issue.FilePath, Line = issue.BeginLine ,
Debt = **10**.ToMinutes().ToDebt(),
Severity =Severity.High
}

Testen Sie CppDepend noch heute

Starten Sie Ihre 14-tägige kostenlose Testversion mit vollem Zugriff auf alle Dokumentationsfunktionen. Keine Kreditkarte erforderlich.