├── MultipleUnaryOperator
├── example.cpp
└── rule.xml
├── EmptyIfStatement
├── example.cpp
└── rule.xml
├── EmptyForStatement
├── example.cpp
└── rule.xml
├── EmptySwitchStatement
├── example.cpp
└── rule.xml
├── ForLoopShouldBeWhileLoop
├── example.cpp
└── rule.xml
├── UseStlAlgorithm
├── copy.cpp
├── fill.cpp
├── generate.cpp
├── transform.cpp
└── rule.xml
├── EmptyDoWhileStatement
├── example.cpp
└── rule.xml
├── BitwiseOperatorInConditional
├── example.cpp
└── rule.xml
├── EmptyElseBlock
├── example.cpp
└── rule.xml
├── EmptyCatchStatement
├── example.cpp
└── rule.xml
├── CollapsibleIfStatements
├── example.cpp
└── rule.xml
├── README.md
├── RedundantConditionalOperator
├── example.cpp
└── rule.xml
├── RedundantIfStatement
├── example.cpp
└── rule.xml
├── InvertedLogic
├── example.cpp
└── rule.xml
├── UnnecessaryElseStatement
├── example.cpp
└── rule.xml
├── .gitignore
└── LICENSE
/MultipleUnaryOperator/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int i)
2 | {
3 | int b = -(+(!(~i)));
4 | (void)b;
5 | }
6 |
--------------------------------------------------------------------------------
/EmptyIfStatement/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int a)
2 | {
3 | if(a == 1) // empty if statement
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/EmptyForStatement/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int* array)
2 | {
3 | for(;;) // empty for statement
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/EmptySwitchStatement/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int i)
2 | {
3 | switch(i) // empty switch statement
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ForLoopShouldBeWhileLoop/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int a)
2 | {
3 | for(; a < 100;)
4 | {
5 | foo(a);
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/UseStlAlgorithm/copy.cpp:
--------------------------------------------------------------------------------
1 | void f1(int* a, int* b, int n)
2 | {
3 | for(int i = 0; i < n; i++)
4 | a[i] = b[i];
5 | }
6 |
--------------------------------------------------------------------------------
/UseStlAlgorithm/fill.cpp:
--------------------------------------------------------------------------------
1 | void f1(int* a, int* b, int n)
2 | {
3 | for(int i = 0; i < n; i++)
4 | a[i] = 1;
5 | }
6 |
--------------------------------------------------------------------------------
/EmptyDoWhileStatement/example.cpp:
--------------------------------------------------------------------------------
1 | void example()
2 | {
3 | do
4 | { // empty do-while statement
5 | } while(1);
6 | }
7 |
--------------------------------------------------------------------------------
/BitwiseOperatorInConditional/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int a, int b)
2 | {
3 | if(a | b)
4 | {
5 | }
6 | if(a & b)
7 | {
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/EmptyElseBlock/example.cpp:
--------------------------------------------------------------------------------
1 | int example(int a)
2 | {
3 | if(1)
4 | {
5 | return a + 1;
6 | }
7 | else // empty else statement, can be safely removed
8 | {
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/EmptyCatchStatement/example.cpp:
--------------------------------------------------------------------------------
1 | void example()
2 | {
3 | try
4 | {
5 | int* m = new int[1000];
6 | }
7 | catch(...) // empty catch statement, this swallows an exception
8 | {
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/CollapsibleIfStatements/example.cpp:
--------------------------------------------------------------------------------
1 | void example(bool x, bool y)
2 | {
3 | if(x) // these two if statements can be
4 | {
5 | if(y) // combined to if (x && y)
6 | {
7 | foo();
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cppcheck-rules
2 | A repository of useful custom cppcheck rules.
3 |
4 | If you're the original author of any of these rules (I failed to note you down), please let me know so I can provide proper attribution.
5 |
--------------------------------------------------------------------------------
/UseStlAlgorithm/generate.cpp:
--------------------------------------------------------------------------------
1 | void f1(int* a, int* b, int n)
2 | {
3 | for(int i = 0; i < n; i++)
4 | a[i] = gen();
5 | }
6 |
7 | void f2(int* a, int* b, int n)
8 | {
9 | for(int i = 0; i < n; i++)
10 | a[i] = ns::gen();
11 | }
12 |
--------------------------------------------------------------------------------
/RedundantConditionalOperator/example.cpp:
--------------------------------------------------------------------------------
1 | void example(int a, int b, int c)
2 | {
3 | bool b1 = a > b ? true : false; // true/false: bool b1 = a > b;
4 | bool b2 = a > b ? false : true; // false/true: bool b2 = !(a > b);
5 | (void)b1;
6 | (void)b2;
7 | }
8 |
--------------------------------------------------------------------------------
/RedundantIfStatement/example.cpp:
--------------------------------------------------------------------------------
1 | bool example(int a, int b)
2 | {
3 | if(a == b) // this if statement is redundant
4 | {
5 | return true;
6 | }
7 | else
8 | {
9 | return false;
10 | } // the entire method can be simplified to return a == b;
11 | }
12 |
--------------------------------------------------------------------------------
/InvertedLogic/example.cpp:
--------------------------------------------------------------------------------
1 | int example(int a)
2 | {
3 | int i;
4 | if(a != 0) // if (a == 0)
5 | { // {
6 | i = 1; // i = 0;
7 | } // }
8 | else // else
9 | { // {
10 | i = 0; // i = 1;
11 | } // }
12 |
13 | return !i ? -1 : 1; // return i ? 1 : -1;
14 | }
15 |
--------------------------------------------------------------------------------
/UnnecessaryElseStatement/example.cpp:
--------------------------------------------------------------------------------
1 | bool example(int a)
2 | {
3 | if(a == 1) // if (a == 1)
4 | { // {
5 | cout << "a is 1."; // cout << "a is 1.";
6 | return true; // return true;
7 | } // }
8 | else //
9 | { //
10 | cout << "a is not 1." // cout << "a is not 1."
11 | } //
12 | }
13 |
--------------------------------------------------------------------------------
/EmptyIfStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptyIfStatement
7 | style
8 | Empty if statement.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EmptyDoWhileStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptyDoWhileStatement
7 | style
8 | Empty do-while.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EmptyForStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptyForStatement
7 | style
8 | Empty for statement.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EmptyElseBlock/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptyElseBlock
7 | style
8 | Empty else statement can be safely removed.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EmptyCatchStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptyCatchStatement
7 | style
8 | An empty catch statement.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EmptySwitchStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | EmptySwitchStatement
7 | style
8 | Empty switch statement.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MultipleUnaryOperator/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | MultipleUnaryOperator
7 | style
8 | Muliple unary operators used together.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/UseStlAlgorithm/transform.cpp:
--------------------------------------------------------------------------------
1 | void f1(int* a, int* b, int n)
2 | {
3 | for(int i = 0; i < n; i++)
4 | a[i] = g(b[i]);
5 | }
6 |
7 | void f2(int* a, int* b, int n)
8 | {
9 | for(int i = 0; i < n; i++)
10 | a[i] = ns::g(b[i]);
11 | }
12 |
13 | void f3(int* a, int* b, int* c, int n)
14 | {
15 | for(int i = 0; i < n; i++)
16 | a[i] = g(b[i], c[i]);
17 | }
18 |
--------------------------------------------------------------------------------
/ForLoopShouldBeWhileLoop/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | ForLoopShouldBeWhileLoop
7 | style
8 | For loop should be written as a while loop.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/BitwiseOperatorInConditional/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | BitwiseOperatorInConditional
7 | style
8 | Bitwise operator found in if statement.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/RedundantConditionalOperator/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | RedundantConditionalOperator
7 | style
8 | Conditional operator is redundant.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/RedundantIfStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | RedundantIfStatement
7 | style
8 | The if statement is redundant.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/CollapsibleIfStatements/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | CollapsibleIfStatements
7 | style
8 | These two if statements can be collapsed into one.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/UnnecessaryElseStatement/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | UnnecessaryElseStatement
7 | style
8 | Else statement is not necessary.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Prerequisites
2 | *.d
3 |
4 | # Compiled Object files
5 | *.slo
6 | *.lo
7 | *.o
8 | *.obj
9 |
10 | # Precompiled Headers
11 | *.gch
12 | *.pch
13 |
14 | # Compiled Dynamic libraries
15 | *.so
16 | *.dylib
17 | *.dll
18 |
19 | # Fortran module files
20 | *.mod
21 | *.smod
22 |
23 | # Compiled Static libraries
24 | *.lai
25 | *.la
26 | *.a
27 | *.lib
28 |
29 | # Executables
30 | *.exe
31 | *.out
32 | *.app
33 |
--------------------------------------------------------------------------------
/InvertedLogic/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | InvertedLogic
7 | style
8 | It is cleaner to invert the logic.
9 |
10 |
11 |
12 | normal
13 |
14 |
15 | InvertedLogic
16 | style
17 | It is cleaner to invert the logic.
18 |
19 |
20 |
21 | normal
22 |
23 |
24 | InvertedLogic
25 | style
26 | It is cleaner to invert the logic.
27 |
28 |
29 |
30 | normal
31 |
32 |
33 | InvertedLogic
34 | style
35 | It is cleaner to invert the logic.
36 |
37 |
38 |
--------------------------------------------------------------------------------
/UseStlAlgorithm/rule.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | normal
4 |
5 |
6 | useStlAlgorithm
7 | style
8 | Considering using std::copy instead.
9 |
10 |
11 |
12 | normal
13 |
14 |
15 | useStlAlgorithm
16 | style
17 | Considering using std::fill instead.
18 |
19 |
20 |
21 | normal
22 |
23 |
24 | useStlAlgorithm
25 | style
26 | Considering using std::generate instead.
27 |
28 |
29 |
30 | normal
31 |
32 |
33 | useStlAlgorithm
34 | style
35 | Considering using std::transform instead.
36 |
37 |
38 |
39 | normal
40 |
41 |
42 | useStlAlgorithm
43 | style
44 | Considering using std::transform instead.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Creative Commons Legal Code
2 |
3 | CC0 1.0 Universal
4 |
5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12 | HEREUNDER.
13 |
14 | Statement of Purpose
15 |
16 | The laws of most jurisdictions throughout the world automatically confer
17 | exclusive Copyright and Related Rights (defined below) upon the creator
18 | and subsequent owner(s) (each and all, an "owner") of an original work of
19 | authorship and/or a database (each, a "Work").
20 |
21 | Certain owners wish to permanently relinquish those rights to a Work for
22 | the purpose of contributing to a commons of creative, cultural and
23 | scientific works ("Commons") that the public can reliably and without fear
24 | of later claims of infringement build upon, modify, incorporate in other
25 | works, reuse and redistribute as freely as possible in any form whatsoever
26 | and for any purposes, including without limitation commercial purposes.
27 | These owners may contribute to the Commons to promote the ideal of a free
28 | culture and the further production of creative, cultural and scientific
29 | works, or to gain reputation or greater distribution for their Work in
30 | part through the use and efforts of others.
31 |
32 | For these and/or other purposes and motivations, and without any
33 | expectation of additional consideration or compensation, the person
34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35 | is an owner of Copyright and Related Rights in the Work, voluntarily
36 | elects to apply CC0 to the Work and publicly distribute the Work under its
37 | terms, with knowledge of his or her Copyright and Related Rights in the
38 | Work and the meaning and intended legal effect of CC0 on those rights.
39 |
40 | 1. Copyright and Related Rights. A Work made available under CC0 may be
41 | protected by copyright and related or neighboring rights ("Copyright and
42 | Related Rights"). Copyright and Related Rights include, but are not
43 | limited to, the following:
44 |
45 | i. the right to reproduce, adapt, distribute, perform, display,
46 | communicate, and translate a Work;
47 | ii. moral rights retained by the original author(s) and/or performer(s);
48 | iii. publicity and privacy rights pertaining to a person's image or
49 | likeness depicted in a Work;
50 | iv. rights protecting against unfair competition in regards to a Work,
51 | subject to the limitations in paragraph 4(a), below;
52 | v. rights protecting the extraction, dissemination, use and reuse of data
53 | in a Work;
54 | vi. database rights (such as those arising under Directive 96/9/EC of the
55 | European Parliament and of the Council of 11 March 1996 on the legal
56 | protection of databases, and under any national implementation
57 | thereof, including any amended or successor version of such
58 | directive); and
59 | vii. other similar, equivalent or corresponding rights throughout the
60 | world based on applicable law or treaty, and any national
61 | implementations thereof.
62 |
63 | 2. Waiver. To the greatest extent permitted by, but not in contravention
64 | of, applicable law, Affirmer hereby overtly, fully, permanently,
65 | irrevocably and unconditionally waives, abandons, and surrenders all of
66 | Affirmer's Copyright and Related Rights and associated claims and causes
67 | of action, whether now known or unknown (including existing as well as
68 | future claims and causes of action), in the Work (i) in all territories
69 | worldwide, (ii) for the maximum duration provided by applicable law or
70 | treaty (including future time extensions), (iii) in any current or future
71 | medium and for any number of copies, and (iv) for any purpose whatsoever,
72 | including without limitation commercial, advertising or promotional
73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74 | member of the public at large and to the detriment of Affirmer's heirs and
75 | successors, fully intending that such Waiver shall not be subject to
76 | revocation, rescission, cancellation, termination, or any other legal or
77 | equitable action to disrupt the quiet enjoyment of the Work by the public
78 | as contemplated by Affirmer's express Statement of Purpose.
79 |
80 | 3. Public License Fallback. Should any part of the Waiver for any reason
81 | be judged legally invalid or ineffective under applicable law, then the
82 | Waiver shall be preserved to the maximum extent permitted taking into
83 | account Affirmer's express Statement of Purpose. In addition, to the
84 | extent the Waiver is so judged Affirmer hereby grants to each affected
85 | person a royalty-free, non transferable, non sublicensable, non exclusive,
86 | irrevocable and unconditional license to exercise Affirmer's Copyright and
87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the
88 | maximum duration provided by applicable law or treaty (including future
89 | time extensions), (iii) in any current or future medium and for any number
90 | of copies, and (iv) for any purpose whatsoever, including without
91 | limitation commercial, advertising or promotional purposes (the
92 | "License"). The License shall be deemed effective as of the date CC0 was
93 | applied by Affirmer to the Work. Should any part of the License for any
94 | reason be judged legally invalid or ineffective under applicable law, such
95 | partial invalidity or ineffectiveness shall not invalidate the remainder
96 | of the License, and in such case Affirmer hereby affirms that he or she
97 | will not (i) exercise any of his or her remaining Copyright and Related
98 | Rights in the Work or (ii) assert any associated claims and causes of
99 | action with respect to the Work, in either case contrary to Affirmer's
100 | express Statement of Purpose.
101 |
102 | 4. Limitations and Disclaimers.
103 |
104 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
105 | surrendered, licensed or otherwise affected by this document.
106 | b. Affirmer offers the Work as-is and makes no representations or
107 | warranties of any kind concerning the Work, express, implied,
108 | statutory or otherwise, including without limitation warranties of
109 | title, merchantability, fitness for a particular purpose, non
110 | infringement, or the absence of latent or other defects, accuracy, or
111 | the present or absence of errors, whether or not discoverable, all to
112 | the greatest extent permissible under applicable law.
113 | c. Affirmer disclaims responsibility for clearing rights of other persons
114 | that may apply to the Work or any use thereof, including without
115 | limitation any person's Copyright and Related Rights in the Work.
116 | Further, Affirmer disclaims responsibility for obtaining any necessary
117 | consents, permissions or other rights required for any use of the
118 | Work.
119 | d. Affirmer understands and acknowledges that Creative Commons is not a
120 | party to this document and has no duty or obligation with respect to
121 | this CC0 or use of the Work.
122 |
--------------------------------------------------------------------------------