8000 Merge branch 'master' into patch-1 · svenzhang2016/cppbestpractices@80227ad · GitHub
[go: up one dir, main page]

Skip to content

Commit 80227ad

Browse files
authored
Merge branch 'master' into patch-1
2 parents bb0d93a + 005bc6b commit 80227ad

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

02-Use_the_Tools_Available.md

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ Use an industry standard widely accepted build tool. This prevents you from rein
3535
* [premake](https://premake.github.io/)
3636
* [xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation
3737

38-
3938
Remember, it's not just a build tool, it's also a programming language. Try to maintain good clean build scripts and follow the recommended practices for the tool you are using.
4039

4140
## Package Manager
@@ -67,7 +66,7 @@ Continuous Integration (CI) tools automatically build the source code as changes
6766
* Java Application Server is required
6867
* supports Windows, OS X, and Linux
6968
* extendable with a lot of plugins
70-
* [TeamCity](https://www.jetbrains.com/teamcity)
69+
* [TeamCity](https://www.jetbrains.com/teamcity)
7170
* has a free option for open source projects
7271
* [Decent CI](https://github.com/lefticus/decent_ci)
7372
* simple ad-hoc continuous integration that posts results to GitHub
@@ -89,7 +88,7 @@ If you have an open source, publicly-hosted project on GitHub:
8988
* go enable Travis Ci and AppVeyor integration right now. We'll wait for you to come back. For a simple example of how to enable it for your C++ CMake-based application, see here: https://github.com/ChaiScript/ChaiScript/blob/master/.travis.yml
9089
* enable one of the coverage tools listed below (Codecov or Coveralls)
9190
* enable [Coverity Scan](https://scan.coverity.com)
92-
91+
9392
These tools are all free and relatively easy to set up. Once they are set up you are getting continuous building, testing, analysis and reporting of your project. For free.
9493

9594

@@ -122,7 +121,7 @@ You should use as many compilers as you can for your platform(s). Each compiler
122121
* `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double`
123122
* `-Wformat=2` warn on security issues around functions that format output (ie `printf`)
124123
* `-Wlifetime` (only special branch of Clang currently) shows object lifetime issues
125-
124+
126125
Consider using `-Weverything` and disabling the few warnings you need to on Clang
127126

128127

@@ -188,7 +187,7 @@ CMake now also comes with built-in support for calling `clang-tidy` during [norm
188187

189188
The best bet is the static analyzer that you can run as part of your automated build system. Cppcheck and clang meet that requirement for free options.
190189

191-
### Coverity Scan
190+
### Coverity Scan
192191

193192
[Coverity](https://scan.coverity.com/) has a free (for open source) static analysis toolkit that can work on every commit in integration with [Travis CI](http://travis-ci.org) and [AppVeyor](http://www.appveyor.com/).
194193

@@ -202,16 +201,16 @@ The best bet is the static analyzer that you can run as part of your automated b
202201
Notes:
203202

204203
* For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`.
205-
* Finding unused headers does not work with `-j` more than 1.
204+
* Finding unused headers does not work with `-j` more than 1.
206205
* Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them.
207-
206+
208207
### cppclean
209208

210209
[cppclean](https://github.com/myint/cppclean) - Open source static analyzer focused on finding problems in C++ source that slow development of large code bases.
211210

212-
211+
213212
### CppDepend
214-
213+
215214
[CppDepend](https://www.cppdepend.com/) Simplifies managing a complex C/C++ code base by analyzing and visualizing code dependencies, by defining design rules, by doing impact analysis, and comparing different versions of the code. It's free for OSS contributors.
216215

217216
### Clang's Static Analyzer
@@ -238,7 +237,7 @@ Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.c
238237

239238
Both of these tools from [JetBrains](https://www.jetbrains.com/cpp/) offer some level of static analysis and automated fixes for common things that can be done better. They have options available for free licenses for open source project leaders.
240239

241-
### Cevelop
240+
### Cevelop
242241

243242
The Eclipse based [Cevelop](https://www.cevelop.com/) IDE has various static analysis and refactoring / code fix tools available. For example, you can replace macros with C++ `constexprs`, refactor namespaces (extract/inline `using`, qualify name), and refactor your code to C++11's uniform initialization syntax. Cevelop is free to use.
244243

@@ -268,7 +267,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e
268267
* integrates with Travis CI and AppVeyor
269268
* free for open source projects
270269
* [LCOV](http://ltp.sourceforge.net/coverage/lcov.php)
271-
* very configurable
270+
* very configurable
272271
* [Gcovr](http://gcovr.com/)
273272
* [kcov](http://simonkagstrom.github.io/kcov/index.html)
274273
* integrates with codecov and coveralls
@@ -297,7 +296,7 @@ Be aware of the sanitizer options available, including runtime options. https://
297296

298297
### Fuzzy Analyzers
299298

300-
If your project accepts user defined input, considering running a fuzzy input tester.
299+
If your project accepts user defined input, considering running a fuzzy input tester.
301300

302301
Both of these tools use coverage reporting to find new code execution paths and try to breed novel inputs for your code. They can find crashes, hangs, and inputs you didn't know were considered valid.
303302

@@ -324,7 +323,7 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des
324323

325324
### Heap Profiling
326325

327-
* [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler
326+
* [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler
328327

329328
## Ignoring Warnings
330329

@@ -374,18 +373,22 @@ Don't forget to make sure that your error handling is being tested and works pro
374373

375374
[ABI Compliance Checker](http://ispras.linuxbase.org/index.php/ABI_compliance_checker) (ACC) can analyze two library versions and generates a detailed compatibility report regarding API and C++ ABI changes. This can help a library 6D40 developer spot unintentional breaking changes to ensure backward compatibility.
376375

377-
### CNCC
376+
### CNCC
378377

379378
[Customizable Naming Convention Checker](https://github.com/mapbox/cncc) can report on identifiers in your code that do not follow certain naming conventions.
380379

381380
### ClangFormat
382381

383382
[ClangFormat](http://clang.llvm.org/docs/ClangFormat.html) can check and correct code formatting to match organizational conventions automatically. [Multipart series](https://engineering.mongodb.com/post/succeeding-with-clangformat-part-1-pitfalls-and-planning/) on utilizing clang-format.
384383

385-
### SourceMeter
384+
### SourceMeter
386385

387386
[SourceMeter](https://www.sourcemeter.com/) offers a free version which provides many different metrics for your code and can also call into cppcheck.
388387

389388
### Bloaty McBloatface
390389

391390
[Bloaty McBloatface](https://github.com/google/bloaty) is a binary size analyzer/profiler for unix-like platforms
391+
392+
### pahole
393+
394+
[pahole](https://linux.die.net/man/1/pahole) generates data on holes in the packing of data structures and classes in compiled code. It can also the size of structures and how they fit within the system's cache lines.

09-Considering_Correctness.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ Consider using a typesafe library like
2121

2222
* https://foonathan.net/type_safe/
2323
* https://github.com/rollbear/strong_type
24+
* https://github.com/joboccara/NamedType
2425

2526
Note that stronger typing can also allow for more compiler optimizations.
2627

27-
2828
* [Sorting in C vs C++](Sorting in C vs C++.pdf)
2929

3030

SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* [Considering Portability](06-Considering_Portability.md)
99
* [Considering Threadability](07-Considering_Threadability.md)
1010
* [Considering Performance](08-Considering_Performance.md)
11-
* [Considering Correctness](09-Considering_Performance.md)
11+
* [Considering Correctness](09-Considering_Correctness.md)
1212
* [Enable Scripting](10-Enable_Scripting.md)
1313
* [Further Reading](11-Further_Reading.md)
1414
* [Final Thoughts](12-Final_Thoughts.md)

0 commit comments

Comments
 (0)
0