From 7966043dfa154d3a01bbff202034f074688ed511 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 30 May 2016 08:15:41 -0600 Subject: [PATCH 001/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 90a43f8..5f2d892 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -174,7 +174,7 @@ The Eclipse based [Cevelop](https://www.cevelop.com/) IDE has various static ana ### Qt Creator -Qt Creator can plug into the clang static analyzer, but *only* on the *commercial* version of Qt Creator. +Qt Creator can plug into the clang static analyzer. ## Runtime Checkers From 7275d2fcc5608be50dbf13e96e21b91cfb6f6055 Mon Sep 17 00:00:00 2001 From: Eric Pederson Date: Thu, 30 Jun 2016 13:04:20 -0400 Subject: [PATCH 002/123] Fix broken link to Google coding standard --- 10-Further_Reading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10-Further_Reading.md b/10-Further_Reading.md index 9b93870..ad4e1f6 100644 --- a/10-Further_Reading.md +++ b/10-Further_Reading.md @@ -6,7 +6,7 @@ * https://www.gitbook.com/book/alexastva/the-ultimate-question-of-programming-refactoring-/details - The Ultimate Question of Programming, Refactoring, and Everything * http://llvm.org/docs/CodingStandards.html - LLVM Coding Standards - very well written * http://geosoft.no/development/cppstyle.html - * http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml (Note that Google's standard document makes several recommendations which we will NOT be following. For example, they explicitly forbid the use of exceptions, which makes [RAII](http://blog2.emptycrate.com/content/nobody-understands-c-part-2-raii) impossible.) + * https://google.github.io/styleguide/cppguide.html (Note that Google's standard document makes several recommendations which we will NOT be following. For example, they explicitly forbid the use of exceptions, which makes [RAII](http://blog2.emptycrate.com/content/nobody-understands-c-part-2-raii) impossible.) * https://isocpp.org/faq/ * http://www.cplusplus.com/ * http://www.gamasutra.com/view/news/128836/InDepth_Static_Code_Analysis.php - Article from John Carmack on the advantages of static analysis From 5683c9214e7def77542b203f6506d98df13185e8 Mon Sep 17 00:00:00 2001 From: Davor Cubranic Date: Thu, 1 Sep 2016 09:18:29 -0700 Subject: [PATCH 003/123] Fix the link to the Ninja build system --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 5f2d892..8b02db9 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -22,7 +22,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) - * [Ninja](https://martine.github.io/ninja/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. + * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. * [Bazel](http://bazel.io/) - Note: MacOS and Linux only. * [gyp](https://chromium.googlesource.com/external/gyp/) - Google's build tool for chromium. * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. From 2da51324fa8f7eea22391addbd6c46c9bc3f53ba Mon Sep 17 00:00:00 2001 From: ekse Date: Mon, 5 Sep 2016 17:05:07 -0400 Subject: [PATCH 004/123] Updated a link to new site The content has moved to a new site and the currently linked version has code formatting issues. --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index f9e1f91..c2cc5be 100644 --- a/03-Style.md +++ b/03-Style.md @@ -384,5 +384,5 @@ The Rule of Zero states that you do not provide any of the functions that the co The goal is to let the compiler provide optimal versions that are automatically maintained when more member variables are added. -The [original article](http://flamingdangerzone.com/cxx11/rule-of-zero/) provides the background, while a [follow up article](https://turingtester.wordpress.com/2015/06/27/cs-rule-of-zero/) explains techniques for implementing nearly 100% of the time. +The [original article](http://flamingdangerzone.com/cxx11/rule-of-zero/) provides the background, while a [follow up article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) explains techniques for implementing nearly 100% of the time. From 31ee7e2bf9b1aa8fd2911284f24955a09387ef6a Mon Sep 17 00:00:00 2001 From: Timothy Lyanguzov Date: Sat, 17 Sep 2016 19:45:28 +1200 Subject: [PATCH 005/123] Updated URL for Google Test --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 8b02db9..e58a49c 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -227,7 +227,7 @@ If it is determined by team consensus that the compiler or analyzer is warning o CMake, mentioned above, has a built in framework for executing tests. Make sure whatever build system you use has a way to execute tests built in. -To further aid in executing tests, consider a library such as [Google Test](https://code.google.com/p/googletest/), [Catch](https://github.com/philsquared/Catch) or [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/) to help you organize the tests. +To further aid in executing tests, consider a library such as [Google Test](https://github.com/google/googletest), [Catch](https://github.com/philsquared/Catch) or [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/) to help you organize the tests. ### Unit Tests From e44c92bcf993760217c06b3b53901216a6657510 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 28 Sep 2016 13:26:25 -0600 Subject: [PATCH 006/123] Add reference to discussion on variadic functions Closes #53 --- 04-Considering_Safety.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index 68028c0..9d6715c 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -138,6 +138,8 @@ But consider refactoring of program logic (for example, additional checking on o Variadic functions can accept a variable number of parameters. The probably best known example is printf(). You have the possibility to define this kind of functions by yourself but this is a possible security risk. The usage of variadic functions is not type safe and the wrong input parameters can cause a program termination with an undefined behavior. This undefined behavior can be exploited to a security problem. If you have the possibility to use a compiler that supports C++11, you can use variadic templates instead. +[It is technically possible to make typesafe C-style variadic functions with some compilers](https://github.com/lefticus/cppbestpractices/issues/53) + ## Additional Resources [How to Prevent The Next Heartbleed](http://www.dwheeler.com/essays/heartbleed.html) by David Wheeler is a good analysis of the current state of code safety and how to ensure safe code. From 8cca20fa246df8e97870e13102afb928d0975370 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 28 Sep 2016 14:12:27 -0600 Subject: [PATCH 007/123] Add link to discussion on object lifetime Closes #52 --- 08-Considering_Performance.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 4d0fab2..33d0db5 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -265,6 +265,8 @@ for (int i = 0; i < 15; ++i) // obj is still taking up memory for no reason ``` +[This topic has an associated discussion thread](https://github.com/lefticus/cppbestpractices/issues/52). + ### Prefer `double` to `float`, But Test First Depending on the situation and the compiler's ability to optimize, one may be faster over the other. Choosing `float` will result in lower precision and may be slower due to conversions. On vectorizable operations `float` may be faster if you are able to sacrifice precision. From acb04cc166c023b5c09c9e2a5b8b01678286edba Mon Sep 17 00:00:00 2001 From: offa Date: Sun, 9 Oct 2016 14:19:16 +0200 Subject: [PATCH 008/123] Gitlab description updated. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index e58a49c..a83f1e0 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -9,7 +9,7 @@ Source control is an absolute necessity for any software development project. If * [GitHub](https://github.com/) - allows for unlimited public repositories, must pay for a private repository. * [Bitbucket](https://bitbucket.org/) - allows for unlimited private repositories with up to 5 collaborators, for free. * [SourceForge](http://sourceforge.net/) - open source hosting only. - * [GitLab](https://gitlab.com/), Subversion, BitKeeper, many many others... The above are the most popular free services. + * [GitLab](https://gitlab.com/) - allows for unlimited public and private repositories, unlimited CI Runners included, for free. * [Visual Studio Online](https://visualstudio.com) (http://www.visualstudio.com/what-is-visual-studio-online-vs) - allows for unlimited public repositories, must pay for private repository. Repositories can be git or TFVC. Additionally: Issue tracking, project planning (multiple Agile templates, such as SCRUM), integrated hosted builds, integration of all this into Microsoft Visual Studio. Windows only. ## Build Tool From 64cc26a0748b9bef2ec588e386ae5827c96cc426 Mon Sep 17 00:00:00 2001 From: offa Date: Sun, 9 Oct 2016 14:27:00 +0200 Subject: [PATCH 009/123] CppUTest added to Test Libraries. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index e58a49c..6b246b3 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -227,7 +227,7 @@ If it is determined by team consensus that the compiler or analyzer is warning o CMake, mentioned above, has a built in framework for executing tests. Make sure whatever build system you use has a way to execute tests built in. -To further aid in executing tests, consider a library such as [Google Test](https://github.com/google/googletest), [Catch](https://github.com/philsquared/Catch) or [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/) to help you organize the tests. +To further aid in executing tests, consider a library such as [Google Test](https://github.com/google/googletest), [Catch](https://github.com/philsquared/Catch), [CppUTest](https://github.com/cpputest/cpputest) or [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/) to help you organize the tests. ### Unit Tests From 6e95809dcb050489f416babdce2886707af3cf12 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 10 Oct 2016 08:10:51 -0600 Subject: [PATCH 010/123] Update 03-Style.md Closes #56 --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index c2cc5be..3b28cef 100644 --- a/03-Style.md +++ b/03-Style.md @@ -380,7 +380,7 @@ struct S { ## Consider the Rule of Zero -The Rule of Zero states that you do not provide any of the functions that the compiler can provide (copy constructor, assignment operator, move constructor, destructor, move constructor) unless the class you are constructing does some novel form of ownership. +The Rule of Zero states that you do not provide any of the functions that the compiler can provide (copy constructor, copy assignment operator, move constructor, move assignment operator, destructor) unless the class you are constructing does some novel form of ownership. The goal is to let the compiler provide optimal versions that are automatically maintained when more member variables are added. From 07e028eddbc3555e97670a9b4571d6dbffa89b14 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 14 Nov 2016 15:27:30 -0700 Subject: [PATCH 011/123] Update 08-Considering_Performance.md --- 08-Considering_Performance.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 33d0db5..5bfd793 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -39,6 +39,11 @@ Templates are not free to instantiate. Instantiating many templates, or template For more examples see [this article](http://blog2.emptycrate.com/content/template-code-bloat-revisited-smaller-makeshared). +### Avoid Recursive Template Instantiations + +Recursive template instantiations can result in a significant load on the compiler and more difficult to understand code. + +[Consider using variadic expansions and folds when possible instead.](http://articles.emptycrate.com/2016/05/14/folds_in_cpp11_ish.html) ### Analyze the Build @@ -46,6 +51,8 @@ The tool [Templight](https://github.com/mikael-s-persson/templight) can be used After you build using Templight, you will need to analyze the results. The [templight-tools](https://github.com/mikael-s-persson/templight-tools) project provides various methods. (Author's Note: I suggest using the callgrind converter and visualizing the results with kcachegrind). + + ### Firewall Frequently Changing Header Files From 3daabe5c18264bd0d8d15125b03a4304fe0a1d32 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 30 Nov 2016 17:08:13 -0700 Subject: [PATCH 012/123] Add uftrace / rr --- 02-Use_the_Tools_Available.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index b7f620f..c49a8ed 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -241,6 +241,16 @@ There should be a test enabled for every feature or bug fix that is committed. S Don't forget to make sure that your error handling is being tested and works properly as well. This will become obvious if you aim for 100% code coverage. +## Debugging + +### uftrace + +[uftrace](https://github.com/namhyung/uftrace) can be used to generating function call graphs of a program execution + +### rr + +[rr](http://rr-project.org/) is a free (open source) reverse debugger that supports C++. + ## Other Tools ### Metrix++ From 57b7ffcd78725cde24bea4c9a5b54c0e1cfa2443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Fri, 2 Dec 2016 23:27:26 +0100 Subject: [PATCH 013/123] MSan should also be mentioned amongst sanitizers. --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c49a8ed..1a69b07 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -206,6 +206,7 @@ Similar to Valgrind. http://www.drmemory.org These tools provide many of the same features as Valgrind, but built into the compiler. They are easy to use and provide a report of what went wrong. * AddressSanitizer + * MemorySanitizer * ThreadSanitizer * UndefinedBehaviorSanitizer From 30c69190fbc4566fa301bec18ddc5e0407c2f390 Mon Sep 17 00:00:00 2001 From: Egor Pugin Date: Sun, 4 Dec 2016 00:55:57 +0300 Subject: [PATCH 014/123] Add C++ Archive Network entry. --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 1a69b07..a695d42 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -20,6 +20,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * Consider: https://github.com/sakra/cotire/ for build performance * Consider: https://github.com/toeb/cmakepp for enhanced usability * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ + * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. From 6b120edc2b6d3c5ca386e62e1d58b039156456a9 Mon Sep 17 00:00:00 2001 From: Svyatoslav Date: Mon, 5 Dec 2016 09:54:38 +0300 Subject: [PATCH 015/123] Add PVS-Studio static analyzer. --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index a695d42..1a9120f 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -150,6 +150,10 @@ The best bet is the static analyzer that you can run as part of your automated b [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/). +### PVS-Studio + +[PVS-Studio](http://www.viva64.com/en/pvs-studio/) is a tool for bug detection in the source code of programs, written in C, C++ and C#. It is free for personal academic projects, open source non-commercial projects and independent projects of individual developers. It works in Windows and Linux environment. + ### Cppcheck [Cppcheck](http://cppcheck.sourceforge.net/) is free and open source. It strives for 0 false positives and does a good job at it. Therefore all warnings should be enabled: `--enable=all` From 8e4f50a58de618fb7387114caf46a8ab2d2f9b40 Mon Sep 17 00:00:00 2001 From: Colin Hirsch Date: Mon, 5 Dec 2016 08:44:28 +0100 Subject: [PATCH 016/123] Note that optimization can improve warnings. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index a695d42..53d8cb0 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -73,7 +73,7 @@ These tools are all free and relatively easy to set up. Once they are set up you ## Compilers -Use every available and reasonable set of warning options +Use every available and reasonable set of warning options. Some warning options only work with optimizations enabled, or work better the higher the chosen level of optimization is. You should use as many compilers as you can for your platform(s). Each compiler implements the standard slightly differently and supporting multiple will help ensure the most portable, most reliable code. From c22333327f19313f3a62acb937e0e7faa5c4f1c5 Mon Sep 17 00:00:00 2001 From: Colin Hirsch Date: Mon, 5 Dec 2016 16:50:45 +0100 Subject: [PATCH 017/123] Add example. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 53d8cb0..e118eeb 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -73,7 +73,7 @@ These tools are all free and relatively easy to set up. Once they are set up you ## Compilers -Use every available and reasonable set of warning options. Some warning options only work with optimizations enabled, or work better the higher the chosen level of optimization is. +Use every available and reasonable set of warning options. Some warning options only work with optimizations enabled, or work better the higher the chosen level of optimization is, for example `-Wnull-dereference` with GCC. You should use as many compilers as you can for your platform(s). Each compiler implements the standard slightly differently and supporting multiple will help ensure the most portable, most reliable code. From cdddc20c8c4148a75151b781dd74ecc7fd4676b2 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 5 Dec 2016 09:06:55 -0700 Subject: [PATCH 018/123] Add link for -Wnull-dereference --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index edfaa2f..7659630 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -73,7 +73,7 @@ These tools are all free and relatively easy to set up. Once they are set up you ## Compilers -Use every available and reasonable set of warning options. Some warning options only work with optimizations enabled, or work better the higher the chosen level of optimization is, for example `-Wnull-dereference` with GCC. +Use every available and reasonable set of warning options. Some warning options only work with optimizations enabled, or work better the higher the chosen level of optimization is, for example [`-Wnull-dereference`](https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wnull-dereference-367) with GCC. You should use as many compilers as you can for your platform(s). Each compiler implements the standard slightly differently and supporting multiple will help ensure the most portable, most reliable code. From 71a8c387682ff78cd08373c2a379ec4c23b8bff4 Mon Sep 17 00:00:00 2001 From: Katherine Sullivan Date: Tue, 6 Dec 2016 01:36:48 -0500 Subject: [PATCH 019/123] fix missing semicolon --- 08-Considering_Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 5bfd793..049a532 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -329,5 +329,5 @@ f("world"); // Good Idea auto f = [](const std::string &s) { return my_function("hello", s); }; -f("world") +f("world"); ``` From c5ca7897efa98cf04221d04e248163e20ae237f1 Mon Sep 17 00:00:00 2001 From: Katherine Sullivan Date: Thu, 8 Dec 2016 15:41:11 -0500 Subject: [PATCH 020/123] Update include-what-you-use url moved from code.google.com to github --- 08-Considering_Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 049a532..b9c5ddb 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -61,7 +61,7 @@ After you build using Templight, you will need to analyze the results. The [temp The compiler has to do something with each include directive it sees. Even if it stops as soon as it seems the `#ifndef` include guard, it still had to open the file and begin processing it. -[include-what-you-use](https://code.google.com/p/include-what-you-use) is a tool that can help you identify which headers you need. +[include-what-you-use](https://github.com/include-what-you-use/include-what-you-use) is a tool that can help you identify which headers you need. #### Reduce the load on the preprocessor From b06a60799b7ce684270c7787c7ecdcd020594ea6 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 19 Dec 2016 20:48:23 -0700 Subject: [PATCH 021/123] Add premake --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 7659630..c82cd45 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -29,6 +29,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. + * [premake](https://premake.github.io/) 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. From 86a5f341168d2c0da501c25b9cf6b5a143fd3383 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 19 Dec 2016 21:01:55 -0700 Subject: [PATCH 022/123] Add "The Ultimate Question of Programming, Refactoring, and Everything" --- 10-Further_Reading.md | 1 + 1 file changed, 1 insertion(+) diff --git a/10-Further_Reading.md b/10-Further_Reading.md index ad4e1f6..2f5817a 100644 --- a/10-Further_Reading.md +++ b/10-Further_Reading.md @@ -15,3 +15,4 @@ * http://emptycrate.com/ * http://stackoverflow.com/questions/tagged/c%2b%2b-faq?sort=votes&pageSize=15 - StackOverflow C++ FAQ * http://codergears.com/qacenter/ discussion center for C and C++ best practices + * http://www.viva64.com/en/b/0391/ The Ultimate Question of Programming, Refactoring, and Everything From d7bd72b7d452adb09785859a2fc02feda15677b9 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 5 Jan 2017 22:23:54 -0700 Subject: [PATCH 023/123] Add note about kcov --- 02-Use_the_Tools_Available.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c82cd45..08c67fb 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -197,6 +197,9 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * [LCOV](http://ltp.sourceforge.net/coverage/lcov.php) * very configurable * [Gcovr](http://gcovr.com/) + * [kcov](http://simonkagstrom.github.io/kcov/index.html) + * integrates with codecov and coveralls + * performs code coverage reporting without needing special compiler flags, just by instrumenting debug symbols. ### Valgrind From 6445e67d83e6570aebb720d31e2c365286120f95 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 5 Jan 2017 23:02:07 -0700 Subject: [PATCH 024/123] Add notes on various analysis tools --- 02-Use_the_Tools_Available.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 08c67fb..c0dccf6 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -19,6 +19,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [CMake](http://www.cmake.org/) * Consider: https://github.com/sakra/cotire/ for build performance * Consider: https://github.com/toeb/cmakepp for enhanced usability + * Utilize: https://cmake.org/cmake/help/v3.6/command/target_compile_features.html for C++ standard flags * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [Waf](https://waf.io/) @@ -138,6 +139,16 @@ Consider using the *treat warnings as errors* setting. `/Wx` with MSVC, `-Werror ## LLVM-based tools +LLVM based tools work best with a build system (such as cmake) that can output a compile command database, for example: + +``` +$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON . +``` + +If you are not using a build system like that, you can consider [Build EAR](https://github.com/rizsotto/Bear) which will hook into your build system and generate a compile command database for you. + +CMake now also comes with built-in support for calling `clang-tidy` during [normal compilation](https://cmake.org/cmake/help/latest/prop_tgt/LANG_CLANG_TIDY.html). + * [include-what-you-use](https://github.com/include-what-you-use), [example results](https://github.com/ChaiScript/ChaiScript/commit/c0bf6ee99dac14a19530179874f6c95255fde173) * [clang-modernize](http://clang.llvm.org/extra/clang-modernize.html), [example results](https://github.com/ChaiScript/ChaiScript/commit/6eab8ddfe154a4ebbe956a5165b390ee700fae1b) * [clang-check](http://clang.llvm.org/docs/ClangCheck.html) @@ -277,7 +288,7 @@ Don't forget to make sure that your error handling is being tested and works pro ### ClangFormat -[ClangFormat](http://clang.llvm.org/docs/ClangFormat.html) can check and correct code formatting to match organizational conventions automatically. +[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. ### SourceMeter From 6e3f2d3f3ce9ca4d7d8155bf3ce188d0ee3e895c Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 5 Jan 2017 23:05:18 -0700 Subject: [PATCH 025/123] Add note on containing warning disabling code. --- 02-Use_the_Tools_Available.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c0dccf6..22c5928 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -244,6 +244,8 @@ Both of these tools use coverage reporting to find new code execution paths and If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. +Be sure to reenable the warning after disabling it for a section of code. You do not want your disabled warnings to [leak into other code](http://www.forwardscattering.org/post/48). + ## Testing CMake, mentioned above, has a built in framework for executing tests. Make sure whatever build system you use has a way to execute tests built in. From eea3d25f0cef91b28db5cf00ead30546738e06ef Mon Sep 17 00:00:00 2001 From: Arun Saha Date: Sat, 18 Feb 2017 08:23:28 -0800 Subject: [PATCH 026/123] formatting fix --- 03-Style.md | 2 +- 08-Considering_Performance.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/03-Style.md b/03-Style.md index 3b28cef..b2c508f 100644 --- a/03-Style.md +++ b/03-Style.md @@ -332,7 +332,7 @@ They should be preferred to macros, because macros do not honor namespaces, etc. ## Use Operator Overloads Judiciously -Operator overloading was invented to enable expressive syntax. Expressive in the sense that adding two big integers looks like `a + b` and not `a.add(b)`. Another common example is std::string, where it is very common to concatenate two strings with `string1 + string2`. +Operator overloading was invented to enable expressive syntax. Expressive in the sense that adding two big integers looks like `a + b` and not `a.add(b)`. Another common example is `std::string`, where it is very common to concatenate two strings with `string1 + string2`. However, you can easily create unreadable expressions using too much or wrong operator overloading. When overloading operators, there are three basic rules to follow as described [on stackoverflow](http://stackoverflow.com/questions/4421706/operator-overloading/4421708#4421708). diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index b9c5ddb..bfe53b4 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -179,7 +179,7 @@ if (caseA) { ```cpp // Better Idea -const std::string somevalue = caseA?"Value A":"Value B"; +const std::string somevalue = caseA ? "Value A" : "Value B"; ``` More complex cases can be facilitated with an [immediately-invoked lambda](http://blog2.emptycrate.com/content/complex-object-initialization-optimization-iife-c11). From 9efc2a70dcdb92b232c4c9f8317373b4534aafae Mon Sep 17 00:00:00 2001 From: Arun Saha Date: Sat, 18 Feb 2017 10:11:46 -0800 Subject: [PATCH 027/123] const member variable --- 03-Style.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index b2c508f..e236628 100644 --- a/03-Style.md +++ b/03-Style.md @@ -277,11 +277,25 @@ private: // ... // ``` - Prefer {} initialization over alternatives unless you have a strong reason not to. Forgetting to initialize a member is a source of undefined behavior bugs which are often extremely hard to find. +If the member variable is not expected to change after the initialization, then mark it `const`. + +```cpp +class MyClass +{ +public: + MyClass(int t_value) + : m_value{t_value} + { + } + +private: + const int m_value{0}; +}; +``` ## Always Use Namespaces From 08127620d16e5b80da67f96b740a07a4ca4a4dda Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 23 Feb 2017 14:37:21 -0700 Subject: [PATCH 028/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 22c5928..a6e4a1f 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -173,6 +173,8 @@ The best bet is the static analyzer that you can run as part of your automated b Clang's analyzer's default options are good for the respective platform. It can be used directly [from CMake](http://garykramlich.blogspot.com/2011/10/using-scan-build-from-clang-with-cmake.html). They can also be called via clang-check and clang-tidy from the [LLVM-based Tools](#llvm-based-tools). +Also, [CodeChecker](https://github.com/Ericsson/CodeChecker) is available as a front-end to clang's static analysis. + ### MSVC's Static Analyzer Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.com/en-us/library/ms173498.aspx). For now we will stick with the default options. @@ -295,3 +297,7 @@ Don't forget to make sure that your error handling is being tested and works pro ### SourceMeter [SourceMeter](https://www.sourcemeter.com/) offers a free version which provides many different metrics for your code and can also call into cppcheck. + +### Bloaty McBloatface + +[Bloaty McBloatface](https://github.com/google/bloaty) is a binary size analyzer/profiler for unix-like platforms From e3e136e1704a2ef4251eee760a55383822b11533 Mon Sep 17 00:00:00 2001 From: offa Date: Fri, 24 Feb 2017 14:45:05 +0100 Subject: [PATCH 029/123] Link to rule of zero article fixed. --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index b2c508f..48e00a3 100644 --- a/03-Style.md +++ b/03-Style.md @@ -384,5 +384,5 @@ The Rule of Zero states that you do not provide any of the functions that the co The goal is to let the compiler provide optimal versions that are automatically maintained when more member variables are added. -The [original article](http://flamingdangerzone.com/cxx11/rule-of-zero/) provides the background, while a [follow up article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) explains techniques for implementing nearly 100% of the time. +The [original article](https://rmf.io/cxx11/rule-of-zero) provides the background, while a [follow up article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) explains techniques for implementing nearly 100% of the time. From 743c4ebbcb53d4a5c5aaa091fd185562b911c522 Mon Sep 17 00:00:00 2001 From: Arun Sah Date: Sat, 25 Feb 2017 07:35:23 -0800 Subject: [PATCH 030/123] Note on copy assignment --- 03-Style.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-Style.md b/03-Style.md index e236628..b8de498 100644 --- a/03-Style.md +++ b/03-Style.md @@ -297,6 +297,8 @@ private: }; ``` +Since a const member variable cannot be assigned a new value, such a class may not have a meaningful copy assignment operator. + ## Always Use Namespaces There is almost never a reason to declare an identifier in the global namespace. Instead, functions and classes should exist in an appropriately named namespace or in a class inside of a namespace. Identifiers which are placed in the global namespace risk conflicting with identifiers from other libraries (mostly C, which doesn't have namespaces). From 64578e803155cffec40b0d1ddbb83a017f106be0 Mon Sep 17 00:00:00 2001 From: Gluttton Date: Sun, 21 May 2017 22:48:29 +0300 Subject: [PATCH 031/123] Added suggestions for usage of cppcheck: use --check-config, use -j1 for detection of unused functions, use --force for checking all #ifdef. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index a6e4a1f..fd62558 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -167,7 +167,7 @@ The best bet is the static analyzer that you can run as part of your automated b [PVS-Studio](http://www.viva64.com/en/pvs-studio/) is a tool for bug detection in the source code of programs, written in C, C++ and C#. It is free for personal academic projects, open source non-commercial projects and independent projects of individual developers. It works in Windows and Linux environment. ### Cppcheck -[Cppcheck](http://cppcheck.sourceforge.net/) is free and open source. It strives for 0 false positives and does a good job at it. Therefore all warnings should be enabled: `--enable=all` +[Cppcheck](http://cppcheck.sourceforge.net/) is free and open source. It strives for 0 false positives and does a good job at it. Therefore all warnings should be enabled: `--enable=all`. For correct work it requires well formed path for headers, so before usage don't forget pass: `--check-config`. If you try to found unused functions don't use `-j` with more than 1. Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. ### Clang's Static Analyzer From fea58947a85276a43ec1e57095e320b03f92eccb Mon Sep 17 00:00:00 2001 From: Gluttton Date: Sun, 21 May 2017 23:15:13 +0300 Subject: [PATCH 032/123] Add GitLab to CI section. --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index a6e4a1f..3d43f55 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -63,6 +63,10 @@ Continuous Integration (CI) tools automatically build the source code as changes * Provides hosted build agents and also allows for user-provided build agents * Can be controlled and monitored from within Microsoft Visual Studio * On-Premise installation via Microsoft Team Foundation Server + * [GitLab](https://gitlab.com) + * use custom Docker images, so can be used for C++ + * has free shared runners + * has trivial processing of result of coverage analyze If you have an open source, publicly-hosted project on GitHub: From f894e14e122f5569e954904018d9e9eede268801 Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 31 May 2017 01:53:14 +0200 Subject: [PATCH 033/123] Clarifying performance in POD vs other in initializer lists. --- 03-Style.md | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/03-Style.md b/03-Style.md index 6d827dc..123406f 100644 --- a/03-Style.md +++ b/03-Style.md @@ -223,7 +223,9 @@ It also makes it possible to have two separate files next to each other on one s ``` ## Initialize Member Variables -...with the member initializer list. +...with the member initializer list. + +For POD types, the performance of an initializer list is the same as manual initialization, but for other types there is a clear performance gain, see below. ```cpp // Bad Idea @@ -239,11 +241,23 @@ private: int m_value; }; +// Bad Idea +// This leads to an additional constructor call for m_myOtherClass +// before the assignment. +class MyClass +{ +public: + MyClass(MyOtherClass t_myOtherClass) + { + m_myOtherClass = t_myOtherClass; + } + +private: + MyOtherClass m_myOtherClass; +}; // Good Idea -// C++'s member initializer list is unique to the language and leads to -// cleaner code and potential performance gains that other languages cannot -// match. +// There is no performance gain here but the code is cleaner. class MyClass { public: @@ -255,6 +269,21 @@ public: private: int m_value; }; + +// Good Idea +// There is a performance gain here because the default constructor +// for m_myOtherClass is never called. +class MyClass +{ +public: + MyClass(MyOtherClass t_myOtherClass) + : m_myOtherClass(t_myOtherClass) + { + } + +private: + MyOtherClass m_myOtherClass; +}; ``` In C++11 you may consider always giving each member a default value, e.g. by writing From 47da1a23b79851bf71421868e5df64b5843e3744 Mon Sep 17 00:00:00 2001 From: Olivia Date: Wed, 31 May 2017 02:09:16 +0200 Subject: [PATCH 034/123] Clarify narrowing between = and {} --- 03-Style.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/03-Style.md b/03-Style.md index 6d827dc..c0d5213 100644 --- a/03-Style.md +++ b/03-Style.md @@ -257,27 +257,34 @@ private: }; ``` -In C++11 you may consider always giving each member a default value, e.g. by writing +In C++11 you can assign default values to each member (using `=` or using `{}`). + +### Assigning default values with = + ```cpp // ... // private: - int m_value = 0; + int m_value = 0; // allowed + unsigned m_value_2 = -1; // narrowing from signed to unsigned allowed // ... // ``` -inside the class body. This makes sure that no constructor ever "forgets" to initialize a member object. +This ensures that no constructor ever "forgets" to initialize a member object. + +### Assigning default values with brace initialization + +Using brace initialization does not allow narrowing at compile-time. -Use brace initialization; it does not allow narrowing at compile-time: ```cpp // Best Idea // ... // private: int m_value{ 0 }; // allowed - unsigned m_value_2 { -1 }; // compile-time error, narrowing from signed to unsigned. + unsigned m_value_2 { -1 }; // narrowing from signed to unsigned not allowed, leads to a compile time error // ... // ``` -Prefer {} initialization over alternatives unless you have a strong reason not to. +Prefer `{}` initialization over `=` unless you have a strong reason not to. Forgetting to initialize a member is a source of undefined behavior bugs which are often extremely hard to find. From 53ff04270f090724cc55ef216399b0f1731a9798 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 1 Jun 2017 15:30:43 -0600 Subject: [PATCH 035/123] Minor adjustments to cppcheck notes --- 02-Use_the_Tools_Available.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index fd62558..a7a25ac 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -167,7 +167,13 @@ The best bet is the static analyzer that you can run as part of your automated b [PVS-Studio](http://www.viva64.com/en/pvs-studio/) is a tool for bug detection in the source code of programs, written in C, C++ and C#. It is free for personal academic projects, open source non-commercial projects and independent projects of individual developers. It works in Windows and Linux environment. ### Cppcheck -[Cppcheck](http://cppcheck.sourceforge.net/) is free and open source. It strives for 0 false positives and does a good job at it. Therefore all warnings should be enabled: `--enable=all`. For correct work it requires well formed path for headers, so before usage don't forget pass: `--check-config`. If you try to found unused functions don't use `-j` with more than 1. Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. +[Cppcheck](http://cppcheck.sourceforge.net/) is free and open source. It strives for 0 false positives and does a good job at it. Therefore all warnings should be enabled: `--enable=all` + +Notes: + + * For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`. + * Finding unused headers does not work with `-j` more than 1. + * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. ### Clang's Static Analyzer From cc81a9b4c5b3893164f22ada1616ea955c03edbd Mon Sep 17 00:00:00 2001 From: Arun Saha Date: Sat, 3 Jun 2017 19:59:20 -0700 Subject: [PATCH 036/123] static constant floating point need constexpr Prior to C++11, only static const data members of integral or enumeration type could have initializers in the class definition. C++11 extends that to floating point types (float, double) as well. However, in order for such members to be initialized in the class defintion, such members must either be constexpr or non-static. --- 05-Considering_Maintainability.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Considering_Maintainability.md b/05-Considering_Maintainability.md index 3116412..402a08a 100644 --- a/05-Considering_Maintainability.md +++ b/05-Considering_Maintainability.md @@ -16,7 +16,7 @@ namespace my_project { // if the above macro would be expanded, then the following line would be: // static const double 3.14159 = 3.14159; // which leads to a compile-time error. Sometimes such errors are hard to understand. - static const double PI = 3.14159; + static constexpr double PI = 3.14159; }; } ``` From e3fec18d318144545ef9d776dcb9bf3e851554c6 Mon Sep 17 00:00:00 2001 From: Olivia Date: Sun, 18 Jun 2017 12:53:53 +0200 Subject: [PATCH 037/123] Adding comment about is_trivially_default_constructible --- 03-Style.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/03-Style.md b/03-Style.md index 123406f..b8b1c61 100644 --- a/03-Style.md +++ b/03-Style.md @@ -271,8 +271,8 @@ private: }; // Good Idea -// There is a performance gain here because the default constructor -// for m_myOtherClass is never called. +// The default constructor for m_myOtherClass is never called here, so +// there is a performance gain if MyOtherClass is not is_trivially_default_constructible. class MyClass { public: From 89be9bb3c3e4c359e35258018725c111e1c051b9 Mon Sep 17 00:00:00 2001 From: Richel Bilderbeek Date: Fri, 23 Jun 2017 14:06:25 +0200 Subject: [PATCH 038/123] Simple typo --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index 3c0a3db..519ada3 100644 --- a/03-Style.md +++ b/03-Style.md @@ -348,7 +348,7 @@ In general, using `auto` will avoid most of these issues, but not all. Make sure you stick with the correct integer types and remain consistent with the C++ standard library. It might not warn on the platform you are currently using, but it probably will when you change platforms. -*Note that you can cause integer underflow when peforming some operations on unsigned values. For example:* +*Note that you can cause integer underflow when performing some operations on unsigned values. For example:* ```cpp std::vector v1{2,3,4,5,6,7,8,9}; From 1f54fe88f47e983eebf3988e295d470e3e55b5e6 Mon Sep 17 00:00:00 2001 From: "Michael V. DePalatis" Date: Fri, 23 Jun 2017 09:13:42 -0400 Subject: [PATCH 039/123] Add links to scripting options --- 09-Enable_Scripting.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/09-Enable_Scripting.md b/09-Enable_Scripting.md index 954e9e7..8b57c4b 100644 --- a/09-Enable_Scripting.md +++ b/09-Enable_Scripting.md @@ -2,10 +2,10 @@ The combination of scripting and compiled languages is very powerful. It gives us the things we've come to love about compiled languages: type safety, performance, thread safety options, consistent memory model while also giving us the flexibility to try something new quickly without a full rebuild. -The VM based compiled languages have learned this already: JRuby, Jython, IronRuby, IronPython +The VM based compiled languages have learned this already: JRuby, Jython, IronRuby, IronPython - * ChaiScript - * AngelScript - * luabind - * sol2 (bindings for Lua) - * SWIG + * [ChaiScript](http://chaiscript.com/) + * [AngelScript](http://www.angelcode.com/angelscript/) + * [luabind](http://www.rasterbar.com/products/luabind.html) + * [sol2](https://github.com/ThePhD/sol2) (bindings for Lua) + * [SWIG](http://www.swig.org/) (simplified wrapper and interface generator) From b75f6cabb93e304c038d3c3287fad57e7cc8b985 Mon Sep 17 00:00:00 2001 From: "Michael V. DePalatis" Date: Fri, 23 Jun 2017 09:15:17 -0400 Subject: [PATCH 040/123] Add pybind11 link --- 09-Enable_Scripting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/09-Enable_Scripting.md b/09-Enable_Scripting.md index 8b57c4b..e22724b 100644 --- a/09-Enable_Scripting.md +++ b/09-Enable_Scripting.md @@ -9,3 +9,4 @@ The VM based compiled languages have learned this already: JRuby, Jython, IronRu * [luabind](http://www.rasterbar.com/products/luabind.html) * [sol2](https://github.com/ThePhD/sol2) (bindings for Lua) * [SWIG](http://www.swig.org/) (simplified wrapper and interface generator) + * [pybind11](https://pybind11.readthedocs.io/en/stable/) (Python and modern C++ interoperability) From 3779f868ad10de5a1821a1e7fdf326b04fce6d21 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 1 Sep 2017 09:31:04 -0600 Subject: [PATCH 041/123] Add note on `assert` --- 05-Considering_Maintainability.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/05-Considering_Maintainability.md b/05-Considering_Maintainability.md index 402a08a..2844116 100644 --- a/05-Considering_Maintainability.md +++ b/05-Considering_Maintainability.md @@ -31,6 +31,22 @@ See http://mortoray.com/2015/06/15/get-rid-of-those-boolean-function-parameters/ Know and understand the existing C++ standard algorithms and put them to use. See [C++ Seasoning](https://www.youtube.com/watch?v=qH6sSOr-yk8) for more details. +## Never Use `assert` With Side Effects + +```cpp +// Bad Idea +assert(set_value(something)); + +// Better Idea +[[maybe_unused]] const auto success = set_value(something); +assert(success); +``` + +The `assert()` will be removed in release builds which will prevent the `set_value` call from every happening. + +So while the second version is uglier, the first version is simply not correct. + + ## Properly Utilize 'override' and 'final' These keywords make it clear to other developers how virtual functions are being utilized, can catch potential errors if the signature of a virtual function changes, and can possibly [hint to the compiler](http://stackoverflow.com/questions/7538820/how-does-the-compiler-benefit-from-cs-new-final-keyword) of optimizations that can be performed. From fdaab39f4925720443a98f9d1b4695c3d554fece Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sat, 16 Sep 2017 09:06:01 -0600 Subject: [PATCH 042/123] Update warnings with info from Krister See also: https://kristerw.blogspot.se/2017/09/useful-gcc-warning-options-not-enabled.html --- 02-Use_the_Tools_Available.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 209b027..4270bbc 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -94,11 +94,18 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wcast-align` warn for potential performance problem casts * `-Wunused` warn on anything being unused * `-Woverloaded-virtual` warn if you overload (not override) a virtual function - * `-pedantic` + * `-Wpedantic` warn if non-standard C++ is used * `-Wconversion` warn on type conversions that may lose data * `-Wsign-conversion` warn on sign conversions * `-Wmisleading-indentation` warn if identation implies blocks where blocks do not exist - + * `-Wduplicated-cond` warn if `if` / `else` chain has duplicated conditions + * `-Wduplicated-branches` warn if `if` / `else` branches have duplicated code + * `-Wlogical-op` warn about logical operations being used where bitwise were probably wanted + * `-Wnull-dereference` warn if a null dereference is detected + * `-Wuseless-cast` warn if you perform a cast to the same type + * `-Wdouble-promotion` warn if `float` is implicit promoted to `double` + * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) + Consider using `-Weverything` and disabling the few warnings you need to on Clang From 52a23430dbfc97fe366545601aae86480f069c39 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 10 Dec 2017 15:13:03 -0700 Subject: [PATCH 043/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4270bbc..6c22ea7 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -192,6 +192,8 @@ Clang's analyzer's default options are good for the respective platform. It can Also, [CodeChecker](https://github.com/Ericsson/CodeChecker) is available as a front-end to clang's static analysis. +`clang-tidy` can be easily used with Visual Studio via the [Clang Power Tools](https://caphyon.github.io/clang-power-tools/) extension. + ### MSVC's Static Analyzer Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.com/en-us/library/ms173498.aspx). For now we will stick with the default options. From 57a62b8f6b5f6e1dad33002b69b444ddf7e56fea Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 10 Dec 2017 15:26:36 -0700 Subject: [PATCH 044/123] Add notes on using clang-format for style --- 03-Style.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/03-Style.md b/03-Style.md index 519ada3..bc9f545 100644 --- a/03-Style.md +++ b/03-Style.md @@ -9,6 +9,22 @@ C++ allows for arbitrary-length identifier names, so there's no reason to be ter are common examples. *snake_case* has the advantage that it can also work with spell checkers, if desired. +## Establishing A Style Guideline + +Whatever style guidelines you establish, be sure to implement a `.clang-format` file that specifies the style you expect. While this cannot help with naming, it is particularly important for an open source project to maintain a consistent style. + +Every IDE and many editors have support for clang-format built in or easily installable with an add-in. + + * VSCode https://marketplace.visualstudio.com/items?itemName=xaver.clang-format + * VisualStudio https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat#review-details + * Resharper++: https://www.jetbrains.com/help/resharper/2017.2/Using_Clang_Format.html + * Vim + * https://github.com/rhysd/vim-clang-format + * https://github.com/chiel92/vim-autoformat + * XCode: https://github.com/travisjeffery/ClangFormat-Xcode + + + ## Common C++ Naming Conventions * Types start with upper case: `MyClass`. From 7099b491647acaedcb82a858cd060e3eaab41b4b Mon Sep 17 00:00:00 2001 From: Richel Bilderbeek Date: Sat, 6 Jan 2018 11:50:35 +0100 Subject: [PATCH 045/123] Added OCLint --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 209b027..1f587b3 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -193,6 +193,10 @@ Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.c [Flint](https://github.com/facebook/flint) and [Flint++](https://github.com/L2Program/FlintPlusPlus) are linters that analyze C++ code against Facebook's coding standards. +### OCLint + +[OCLint](http://oclint.org/) is a free, libre and open source static code analysis tool for improving quality of C++ code in many different ways. + ### ReSharper C++ / CLion 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. From 201cc6d4045a2b10125ff453df2d3d5d60741336 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 7 Jan 2018 20:41:52 -0700 Subject: [PATCH 046/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 6c22ea7..22ef726 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -113,6 +113,8 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan ### MSVC +`/permissive-` - [Enforces standards conformance](https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance). + `/W4 /W44640` - use these and consider the following * `/W4` All reasonable warnings From 95e7a16c1eb98c461498428b380051c6a247cc6c Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 7 Jan 2018 21:31:00 -0700 Subject: [PATCH 047/123] Add control flow guard --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 22ef726..fa0fadd 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -263,6 +263,10 @@ Both of these tools use coverage reporting to find new code execution paths and * [LibFuzzer](http://llvm.org/docs/LibFuzzer.html) * [KLEE](http://klee.github.io/) - Can be used to fuzz individual functions +### Control Flow Guard + +MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) adds high performance runtime security checks. + ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. From 7d67dbef4c586b99ff4b92659454a014b68f6f51 Mon Sep 17 00:00:00 2001 From: "Michael V. DePalatis" Date: Thu, 18 Jan 2018 09:59:10 -0500 Subject: [PATCH 048/123] Fix typo --- 04-Considering_Safety.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index 9d6715c..7136767 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -120,7 +120,7 @@ Exceptions cannot be ignored. Return values, such as using `boost::optional`, ca Stroustrup, the original designer of C++, [makes this point](http://www.stroustrup.com/bs_faq2.html#exceptions-why) much better than I ever could. ## Use C++-style cast instead of C-style cast -Use the C++-style cast (static\_cast<>, dynamic\_cast<> ...) instead of the C-style cast. The C++-style cast allows more compiler checks and is considerable safer. +Use the C++-style cast (static\_cast<>, dynamic\_cast<> ...) instead of the C-style cast. The C++-style cast allows more compiler checks and is considerably safer. ```cpp // Bad Idea From 75b4ad1b43ae8b651e430fc8a9173b834d32e37e Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 18 Jan 2018 16:50:27 -0700 Subject: [PATCH 049/123] Update MSVC flags descriptions Closes #79 --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index b6a97c2..18f8e47 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -115,7 +115,7 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan `/permissive-` - [Enforces standards conformance](https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance). -`/W4 /W44640` - use these and consider the following +`/W4 /W14640` - use these and consider the following (see descriptions below) * `/W4` All reasonable warnings * `/w14242` 'identfier': conversion from 'type1' to 'type1', possible loss of data From 28fbde4064f9af2312061cd8f8c46a054ca1e44b Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 14 Feb 2018 08:45:18 -0700 Subject: [PATCH 050/123] Add cmake-format --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 18f8e47..e320e34 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -20,6 +20,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * Consider: https://github.com/sakra/cotire/ for build performance * Consider: https://github.com/toeb/cmakepp for enhanced usability * Utilize: https://cmake.org/cmake/help/v3.6/command/target_compile_features.html for C++ standard flags + * Consider: https://github.com/cheshirekow/cmake_format for automatic formatting of your CMakeLists.txt * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [Waf](https://waf.io/) From 84c1d42fb7b227c534a398164b859b605e5bcaa8 Mon Sep 17 00:00:00 2001 From: CoderGears Date: Thu, 15 Feb 2018 10:20:56 +0000 Subject: [PATCH 051/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index e320e34..4267e59 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -188,6 +188,10 @@ Notes: * For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`. * Finding unused headers does not work with `-j` more than 1. * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. + + ### CppDepend + +[CppDepend](http://www.cppdpeend.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. ### Clang's Static Analyzer From 1d10cb6b2363e53b3d8b3df93ccb2d00db37363d Mon Sep 17 00:00:00 2001 From: demonkoryu Date: Tue, 6 Mar 2018 11:13:55 +0100 Subject: [PATCH 052/123] Fix CppDepend URL --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4267e59..fb4fc4a 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -191,7 +191,7 @@ Notes: ### CppDepend -[CppDepend](http://www.cppdpeend.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. +[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. ### Clang's Static Analyzer From 2bdd60cb961eecfe64061d1fb0e6d20a13d28ebe Mon Sep 17 00:00:00 2001 From: CoderGears Date: Tue, 6 Mar 2018 10:47:14 +0000 Subject: [PATCH 053/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4267e59..97f0d24 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -191,7 +191,7 @@ Notes: ### CppDepend -[CppDepend](http://www.cppdpeend.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. +[CppDepend](http://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. ### Clang's Static Analyzer From 2764eb398dfb5ae3cdb4d2b191c5cf6d9c306e63 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 23 Mar 2018 07:35:24 -0600 Subject: [PATCH 054/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index fb4fc4a..0c7e001 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -225,6 +225,10 @@ The Eclipse based [Cevelop](https://www.cevelop.com/) IDE has various static ana Qt Creator can plug into the clang static analyzer. +### clazy + +[clazy](https://github.com/KDE/clazy) is a clang based tool for analyzing Qt usage. + ## Runtime Checkers ### Code Coverage Analysis From c58e6d75e6b1677c54365370a97eaa3ba41ff575 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 27 Apr 2018 19:28:12 -0600 Subject: [PATCH 055/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 0c7e001..9164e03 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -280,6 +280,10 @@ Both of these tools use coverage reporting to find new code execution paths and MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) adds high performance runtime security checks. +### Checked STL Implementations + + * `_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html). + ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. @@ -316,6 +320,10 @@ Don't forget to make sure that your error handling is being tested and works pro ## Other Tools +### Lizard + +[Lizard](http://www.lizard.ws/) provides a very simple interface for running complexity analysis against a C++ codebase. + ### Metrix++ [Metrix++](http://metrixplusplus.sourceforge.net/) can identify and report on the most complex sections of your code. Reducing complex code helps you and the compiler understand it better and optimize it better. From 1ecc3f5fd9aa53db09a2f385156b9c51de169013 Mon Sep 17 00:00:00 2001 From: David Hirvonen Date: Sat, 2 Jun 2018 10:14:49 -0400 Subject: [PATCH 056/123] add hunter to build tools --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 9164e03..155afc1 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -32,6 +32,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. * [premake](https://premake.github.io/) + * [hunter](https://github.com/ruslo/hunter) - CMake driven cross-platform package manager for C/C++ 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. From aa2f8ce9caa23e2dd79a4c2f63831ef86ca45044 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 16:24:18 -0600 Subject: [PATCH 057/123] Addition of package management section --- 02-Use_the_Tools_Available.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 155afc1..e0591e8 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -21,8 +21,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * Consider: https://github.com/toeb/cmakepp for enhanced usability * Utilize: https://cmake.org/cmake/help/v3.6/command/target_compile_features.html for C++ standard flags * Consider: https://github.com/cheshirekow/cmake_format for automatic formatting of your CMakeLists.txt - * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ - * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ + * See the [Further Reading](10-Further_Reading.md) section for CMake specific best practices * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. @@ -32,10 +31,20 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. * [premake](https://premake.github.io/) - * [hunter](https://github.com/ruslo/hunter) - CMake driven cross-platform package manager for C/C++ + 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. +## Package Manager + +Package management is an important topic in C++, with currently no clear winner. Consider using a package manager to help you keep track of the dependencies for your project and make it easier for new people to get started with the project. + + * [Conan](https://www.conan.io/) - a crossplatform dependency manager for C++ + * [hunter](https://github.com/ruslo/hunter) - CMake driven cross-platform package manager for C/C++ + * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ + * [qpm](https://www.qpm.io/) - Package manager for Qt + + ## Continuous Integration Once you have picked your build tool, set up a continuous integration environment. @@ -190,7 +199,7 @@ Notes: * Finding unused headers does not work with `-j` more than 1. * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. - ### CppDepend +### CppDepend [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. @@ -248,6 +257,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * [kcov](http://simonkagstrom.github.io/kcov/index.html) * integrates with codecov and coveralls * performs code coverage reporting without needing special compiler flags, just by instrumenting debug symbols. + * [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) - open source coverage reporting tool for Windows. ### Valgrind @@ -267,6 +277,8 @@ These tools provide many of the same features as Valgrind, but built into the co * ThreadSanitizer * UndefinedBehaviorSanitizer +Be aware of the sanitizer options available, including runtime options. https://kristerw.blogspot.com/2018/06/useful-gcc-address-sanitizer-checks-not.html + ### Fuzzy Analyzers If your project accepts user defined input, considering running a fuzzy input tester. From c4f76f7d984c1ede08d1959930870c2b213f87db Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 16:26:59 -0600 Subject: [PATCH 058/123] Add links to documents on modern CMake. --- 10-Further_Reading.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/10-Further_Reading.md b/10-Further_Reading.md index 2f5817a..ee9c999 100644 --- a/10-Further_Reading.md +++ b/10-Further_Reading.md @@ -2,6 +2,8 @@ *Note: This book has now inspired a video series from O'Reilly, [Learning C++ Best Practices](http://shop.oreilly.com/product/0636920049814.do)* +## C++ + * https://github.com/isocpp/CppCoreGuidelines The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++ * https://www.gitbook.com/book/alexastva/the-ultimate-question-of-programming-refactoring-/details - The Ultimate Question of Programming, Refactoring, and Everything * http://llvm.org/docs/CodingStandards.html - LLVM Coding Standards - very well written @@ -16,3 +18,11 @@ * http://stackoverflow.com/questions/tagged/c%2b%2b-faq?sort=votes&pageSize=15 - StackOverflow C++ FAQ * http://codergears.com/qacenter/ discussion center for C and C++ best practices * http://www.viva64.com/en/b/0391/ The Ultimate Question of Programming, Refactoring, and Everything + +## CMake + + * https://cmake.org/cmake/help/latest/manual/cmake.1.html - Be aware that there are `--warn` command line options for CMake that can catch some issues. + * https://github.com/Akagi201/learning-cmake + * https://codingnest.com/basic-cmake/ + * https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 - Effective CMake online book + From 5c5800d8f397151a127c1c92cf89b84739b1dcb5 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 16:50:48 -0600 Subject: [PATCH 059/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index e0591e8..735d259 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -43,7 +43,7 @@ Package management is an important topic in C++, with currently no clear winner. * [hunter](https://github.com/ruslo/hunter) - CMake driven cross-platform package manager for C/C++ * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [qpm](https://www.qpm.io/) - Package manager for Qt - + * [build2](https://build2.org/) - cargo-like package management for C++ ## Continuous Integration @@ -199,6 +199,11 @@ Notes: * Finding unused headers does not work with `-j` more than 1. * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. +### cppclean + +[cppclean](https://github.com/myint/cppclean) - Open source static analyzer focused on finding problems in C++ source that slow development of large code bases. + + ### CppDepend [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. @@ -297,6 +302,10 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des * `_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html). +### Heap Profiling + + * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler + ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. From c14bafea7a9775dd4964a0384a37cec74eb6c7e3 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 16:58:41 -0600 Subject: [PATCH 060/123] Update 06-Considering_Portability.md --- 06-Considering_Portability.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/06-Considering_Portability.md b/06-Considering_Portability.md index 228f5c0..5fd89ef 100644 --- a/06-Considering_Portability.md +++ b/06-Considering_Portability.md @@ -6,6 +6,16 @@ Most portability issues that generate warnings are because we are not careful ab http://www.viva64.com/en/a/0010/ +## Use The Standard Library + +### `std::filesystem` + +C++17 added a new `filesystem` library which provides portable filesystem access across all supporting compilers + +### `std::thread` + +C++11's threading capabilities should be utilized over `pthread` or `WinThreads`. + ## Other Concerns Most of the other concerns in this document ultimately come back to portability issues. [Avoid statics](07-Considering_Threadability.md#statics) is particularly of note. From 6e22a97a685096078c4cebba8681ec8ea8da9b8c Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 17:02:13 -0600 Subject: [PATCH 061/123] Update 08-Considering_Performance.md --- 08-Considering_Performance.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index bfe53b4..7c651f6 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -331,3 +331,13 @@ f("world"); auto f = [](const std::string &s) { return my_function("hello", s); }; f("world"); ``` + + +### Know The Standard Library + +Properly use the already highly optimized components of the vendor provided standard library. + +#### `in_place_t` And Related + +Be aware of how to use `in_place_t` and related tags for effecient creation of objects such as `std::tuple`, `std::any` and `std::variant`. + From e1aba52b590790239421724f48cb0492be9449a5 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 18 Jul 2018 17:09:54 -0600 Subject: [PATCH 062/123] Update 10-Further_Reading.md --- 10-Further_Reading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10-Further_Reading.md b/10-Further_Reading.md index ee9c999..da29601 100644 --- a/10-Further_Reading.md +++ b/10-Further_Reading.md @@ -25,4 +25,4 @@ * https://github.com/Akagi201/learning-cmake * https://codingnest.com/basic-cmake/ * https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 - Effective CMake online book - + * https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ From 86b4e0aad5d61c0fa8e552f4d9f94d62063016ec Mon Sep 17 00:00:00 2001 From: Edward Kim <33057457+edykim@users.noreply.github.com> Date: Fri, 27 Jul 2018 09:54:42 -0700 Subject: [PATCH 063/123] Fix typo --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 735d259..450405b 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -108,7 +108,7 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wpedantic` warn if non-standard C++ is used * `-Wconversion` warn on type conversions that may lose data * `-Wsign-conversion` warn on sign conversions - * `-Wmisleading-indentation` warn if identation implies blocks where blocks do not exist + * `-Wmisleading-indentation` warn if indentation implies blocks where blocks do not exist * `-Wduplicated-cond` warn if `if` / `else` chain has duplicated conditions * `-Wduplicated-branches` warn if `if` / `else` branches have duplicated code * `-Wlogical-op` warn about logical operations being used where bitwise were probably wanted From 12ec9d63cb7dfe4d4fa70af956fa6cd7036dfac5 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 4 Sep 2018 09:03:24 -0600 Subject: [PATCH 064/123] Update 05-Considering_Maintainability.md --- 05-Considering_Maintainability.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Considering_Maintainability.md b/05-Considering_Maintainability.md index 2844116..f6d8eec 100644 --- a/05-Considering_Maintainability.md +++ b/05-Considering_Maintainability.md @@ -42,7 +42,7 @@ assert(set_value(something)); assert(success); ``` -The `assert()` will be removed in release builds which will prevent the `set_value` call from every happening. +The `assert()` will be removed in release builds which will prevent the `set_value` call from ever happening. So while the second version is uglier, the first version is simply not correct. From c58f76d2989044fb881cbe8416e16d6bd6ea5d76 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 3 Oct 2018 11:55:59 -0600 Subject: [PATCH 065/123] Add note on `-Wlifetime` --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 450405b..6ce1c0c 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -116,6 +116,7 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wuseless-cast` warn if you perform a cast to the same type * `-Wdouble-promotion` warn if `float` is implicit promoted to `double` * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) + * `-Wlifetime` (clang only currently) shows object lifetime issues Consider using `-Weverything` and disabling the few warnings you need to on Clang From 31549d8e3733519872e2fdffda71b1af15a81e6c Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Sun, 28 Oct 2018 10:14:13 +0100 Subject: [PATCH 066/123] Fix typo --- 08-Considering_Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 7c651f6..313f000 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -59,7 +59,7 @@ After you build using Templight, you will need to analyze the results. The [temp #### Don't Unnecessarily Include Headers -The compiler has to do something with each include directive it sees. Even if it stops as soon as it seems the `#ifndef` include guard, it still had to open the file and begin processing it. +The compiler has to do something with each include directive it sees. Even if it stops as soon as it sees the `#ifndef` include guard, it still had to open the file and begin processing it. [include-what-you-use](https://github.com/include-what-you-use/include-what-you-use) is a tool that can help you identify which headers you need. From 90797e2294ca01aab0b4efe2f2d51e7039c33046 Mon Sep 17 00:00:00 2001 From: ashutosh108 Date: Wed, 14 Nov 2018 22:31:24 +0200 Subject: [PATCH 067/123] /W14640 => /w14640 In the "MSVC" section, "/w14640" is correctly given as lowercase in the detailed list, but wrongly given with uppercase "W" in the summary above. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 6ce1c0c..ca9a295 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -127,7 +127,7 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan `/permissive-` - [Enforces standards conformance](https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance). -`/W4 /W14640` - use these and consider the following (see descriptions below) +`/W4 /w14640` - use these and consider the following (see descriptions below) * `/W4` All reasonable warnings * `/w14242` 'identfier': conversion from 'type1' to 'type1', possible loss of data From 6a9fb6af66d27454cc5066144222debf6d22664d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Plch?= Date: Sun, 18 Nov 2018 18:58:04 +0100 Subject: [PATCH 068/123] fix typo --- 08-Considering_Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 7c651f6..226a156 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -278,7 +278,7 @@ for (int i = 0; i < 15; ++i) Depending on the situation and the compiler's ability to optimize, one may be faster over the other. Choosing `float` will result in lower precision and may be slower due to conversions. On vectorizable operations `float` may be faster if you are able to sacrifice precision. -`double` is the recomended default choice as it is the default type for floating point values in C++. +`double` is the recommended default choice as it is the default type for floating point values in C++. See this [stackoverflow](http://stackoverflow.com/questions/4584637/double-or-float-which-is-faster) discussion for some more information. From 93db02100ea57662ef1dd34762443290ec9320ae Mon Sep 17 00:00:00 2001 From: Paul Dreik Date: Tue, 20 Nov 2018 22:00:18 +0100 Subject: [PATCH 069/123] Add reference for cmake I found this to be an excellent guide --- 10-Further_Reading.md | 1 + 1 file changed, 1 insertion(+) diff --git a/10-Further_Reading.md b/10-Further_Reading.md index da29601..515e16f 100644 --- a/10-Further_Reading.md +++ b/10-Further_Reading.md @@ -26,3 +26,4 @@ * https://codingnest.com/basic-cmake/ * https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 - Effective CMake online book * https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ + * https://cliutils.gitlab.io/modern-cmake/ - An Introduction to Modern CMake From 147736a36bd8c8298985b58a46addead8a90f15a Mon Sep 17 00:00:00 2001 From: Anton Voloshin Date: Wed, 21 Nov 2018 22:03:05 +0200 Subject: [PATCH 070/123] add GCC/Clang compiler versions for warning flags Added a note like (only in GCC >= 4.8) or (GCC >= 4.6, Clang >= 3.8) for every suggested -Wxxx flag since they are not uniformly supported. Based on WARN_FLAGS setup code in https://github.com/ashutosh108/sb-sloka-counter/blob/d209af97b567e4e92ed8ca7500e34c759a860885/CMakeLists.txt. Verified by using godbolt.org and digging around release notes. --- 02-Use_the_Tools_Available.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index ca9a295..ef69db8 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -105,18 +105,18 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wcast-align` warn for potential performance problem casts * `-Wunused` warn on anything being unused * `-Woverloaded-virtual` warn if you overload (not override) a virtual function - * `-Wpedantic` warn if non-standard C++ is used + * `-Wpedantic` (GCC only) warn if non-standard C++ is used * `-Wconversion` warn on type conversions that may lose data - * `-Wsign-conversion` warn on sign conversions - * `-Wmisleading-indentation` warn if indentation implies blocks where blocks do not exist - * `-Wduplicated-cond` warn if `if` / `else` chain has duplicated conditions - * `-Wduplicated-branches` warn if `if` / `else` branches have duplicated code - * `-Wlogical-op` warn about logical operations being used where bitwise were probably wanted - * `-Wnull-dereference` warn if a null dereference is detected - * `-Wuseless-cast` warn if you perform a cast to the same type - * `-Wdouble-promotion` warn if `float` is implicit promoted to `double` + * `-Wsign-conversion` (Clang all versions, GCC >= 4.3) warn on sign conversions + * `-Wmisleading-indentation` (only in GCC >= 6.0) warn if indentation implies blocks where blocks do not exist + * `-Wduplicated-cond` (only in GCC >= 6.0) warn if `if` / `else` chain has duplicated conditions + * `-Wduplicated-branches` (only in GCC >= 7.0) warn if `if` / `else` branches have duplicated code + * `-Wlogical-op` (only in GCC) warn about logical operations being used where bitwise were probably wanted + * `-Wnull-dereference` (only in GCC >= 6.0) warn if a null dereference is detected + * `-Wuseless-cast` (only in GCC >= 4.8) warn if you perform a cast to the same type + * `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double` * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) - * `-Wlifetime` (clang only currently) shows object lifetime issues + * `-Wlifetime` (only special branch of Clang currently) shows object lifetime issues Consider using `-Weverything` and disabling the few warnings you need to on Clang From f49737bc805fb3af58a5159b47496ea9ad5a92cf Mon Sep 17 00:00:00 2001 From: Anton Voloshin Date: Thu, 22 Nov 2018 18:43:12 +0200 Subject: [PATCH 071/123] -Wpedantic: CLang >= 3.2 as well (Update 02-Use_the_Tools_Available.md) --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index ef69db8..84abba1 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -105,7 +105,7 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wcast-align` warn for potential performance problem casts * `-Wunused` warn on anything being unused * `-Woverloaded-virtual` warn if you overload (not override) a virtual function - * `-Wpedantic` (GCC only) warn if non-standard C++ is used + * `-Wpedantic` (all versions of GCC, Clang >= 3.2) warn if non-standard C++ is used * `-Wconversion` warn on type conversions that may lose data * `-Wsign-conversion` (Clang all versions, GCC >= 4.3) warn on sign conversions * `-Wmisleading-indentation` (only in GCC >= 6.0) warn if indentation implies blocks where blocks do not exist From bc1ed4222e0a7bb7f40a1581031ac6338372faf7 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 25 Nov 2018 17:18:32 -0700 Subject: [PATCH 072/123] Update 08-Considering_Performance.md Add notes on clcache --- 08-Considering_Performance.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index e65e4c7..c1ecd95 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -83,7 +83,8 @@ Tools like [cotire](https://github.com/sakra/cotire/) (a plugin for cmake) can h These are not meant to supersede good design - * [ccache](https://ccache.samba.org/) + * [ccache](https://ccache.samba.org/), compile results caching for unix-like operating systems + * [clcache](https://github.com/frerich/clcache), compile results caching for cl.exe (MSVC) * [warp](https://github.com/facebook/warp), Facebook's preprocessor ### Put tmp on Ramdisk From f22cfe10daf9cf968fd7c1edd491002e557d9300 Mon Sep 17 00:00:00 2001 From: Tristan Carel Date: Tue, 18 Dec 2018 08:36:03 +0100 Subject: [PATCH 073/123] Fix typo --- 08-Considering_Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index c1ecd95..6db41c3 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -340,5 +340,5 @@ Properly use the already highly optimized components of the vendor provided stan #### `in_place_t` And Related -Be aware of how to use `in_place_t` and related tags for effecient creation of objects such as `std::tuple`, `std::any` and `std::variant`. +Be aware of how to use `in_place_t` and related tags for efficient creation of objects such as `std::tuple`, `std::any` and `std::variant`. From 187c033b74e04ea11d3d09d0b0b193a4e9d999c1 Mon Sep 17 00:00:00 2001 From: Rostyslav Kurylo Date: Sun, 23 Dec 2018 21:53:30 +0200 Subject: [PATCH 074/123] Mention C++17's init-statement in the `Limit Variable Scope` section --- 08-Considering_Performance.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 6db41c3..89404c5 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -273,6 +273,16 @@ for (int i = 0; i < 15; ++i) // obj is still taking up memory for no reason ``` +For C++17 and onwards, consider using init-statement in the `if` and `switch` statements: + +```cpp +if (MyObject obj(index); obj.good()) { + // do something if obj is good +} else { + // do something if obj is not good +} +``` + [This topic has an associated discussion thread](https://github.com/lefticus/cppbestpractices/issues/52). ### Prefer `double` to `float`, But Test First From 719b94324b9a14f1cee26ebb4b40eca37aaf797f Mon Sep 17 00:00:00 2001 From: Daniel Evers Date: Sun, 3 Mar 2019 21:55:27 +0100 Subject: [PATCH 075/123] updated GitHub description (providing free private repos) --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 84abba1..9baa546 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -6,7 +6,7 @@ An automated framework for executing these tools should be established very earl Source control is an absolute necessity for any software development project. If you are not using one yet, start using one. - * [GitHub](https://github.com/) - allows for unlimited public repositories, must pay for a private repository. + * [GitHub](https://github.com/) - allows for unlimited public repositories, and unlimited private repositories with up to 3 collaborators. * [Bitbucket](https://bitbucket.org/) - allows for unlimited private repositories with up to 5 collaborators, for free. * [SourceForge](http://sourceforge.net/) - open source hosting only. * [GitLab](https://gitlab.com/) - allows for unlimited public and private repositories, unlimited CI Runners included, for free. From e161b096599a98251179471b9ff89050397d1434 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 26 Mar 2019 08:36:27 -0600 Subject: [PATCH 076/123] Fix clangpowertools links --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 9baa546..165e74d 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -215,7 +215,7 @@ Clang's analyzer's default options are good for the respective platform. It can Also, [CodeChecker](https://github.com/Ericsson/CodeChecker) is available as a front-end to clang's static analysis. -`clang-tidy` can be easily used with Visual Studio via the [Clang Power Tools](https://caphyon.github.io/clang-power-tools/) extension. +`clang-tidy` can be easily used with Visual Studio via the [Clang Power Tools](https://clangpowertools.com) extension. ### MSVC's Static Analyzer From a5aa2b4654ba84dad15e1505aa0e111915e3b057 Mon Sep 17 00:00:00 2001 From: njlr Date: Wed, 27 Mar 2019 11:50:00 +0000 Subject: [PATCH 077/123] Update 02-Use_the_Tools_Available.md * Bazel works on Windows now, so corrected this * Adds mention of Buck, which is similar to Bazel * Adds mention of Buckaroo --- 02-Use_the_Tools_Available.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 165e74d..4bd5135 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -25,7 +25,8 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. - * [Bazel](http://bazel.io/) - Note: MacOS and Linux only. + * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution + * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid * [gyp](https://chromium.googlesource.com/external/gyp/) - Google's build tool for chromium. * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. @@ -44,6 +45,7 @@ Package management is an important topic in C++, with currently no clear winner. * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [qpm](https://www.qpm.io/) - Package manager for Qt * [build2](https://build2.org/) - cargo-like package management for C++ + * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more ## Continuous Integration From 54e2a3b7a46a1918d9b88d7ee7c2b433ab57acdd Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 18 Apr 2019 15:00:48 -0600 Subject: [PATCH 078/123] Add note on cmake --build --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4bd5135..21fa04e 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -22,6 +22,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * Utilize: https://cmake.org/cmake/help/v3.6/command/target_compile_features.html for C++ standard flags * Consider: https://github.com/cheshirekow/cmake_format for automatic formatting of your CMakeLists.txt * See the [Further Reading](10-Further_Reading.md) section for CMake specific best practices + * `cmake --build` provides a common interface for compiling your project regardless of platform * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. From 31cef74911bc38b8d69aee63867e56f80039bc9e Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Thu, 18 Apr 2019 15:04:29 -0600 Subject: [PATCH 079/123] Enhance notes on algorithms. --- 05-Considering_Maintainability.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/05-Considering_Maintainability.md b/05-Considering_Maintainability.md index f6d8eec..4547559 100644 --- a/05-Considering_Maintainability.md +++ b/05-Considering_Maintainability.md @@ -29,7 +29,13 @@ See http://mortoray.com/2015/06/15/get-rid-of-those-boolean-function-parameters/ ## Avoid Raw Loops -Know and understand the existing C++ standard algorithms and put them to use. See [C++ Seasoning](https://www.youtube.com/watch?v=qH6sSOr-yk8) for more details. +Know and understand the existing C++ standard algorithms and put them to use. + + * See [cppreference](https://en.cppreference.com/w/cpp/algorithm) + * Watch [C++ Seasoning](https://www.youtube.com/watch?v=qH6sSOr-yk8) + +Consider a call to `[]` as a potential code smell, indicating that an algorithm was not used where it could have been. + ## Never Use `assert` With Side Effects From 7ff2c521a33aec7bb27f0b2e662b93b0a2f192ad Mon Sep 17 00:00:00 2001 From: Thomas Bailleux Date: Wed, 24 Apr 2019 09:39:14 +0200 Subject: [PATCH 080/123] Add IKOS to the list of static analyzers --- 02-Use_the_Tools_Available.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 21fa04e..c635a3b 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -248,6 +248,11 @@ Qt Creator can plug into the clang static analyzer. [clazy](https://github.com/KDE/clazy) is a clang based tool for analyzing Qt usage. +### IKOS + +[IKOS](https://ti.arc.nasa.gov/opensource/ikos/) is an open source static analyzer, developed by NASA. It is based on the Abstract Interpretation. It is written in C++ and provides an analyzer for C and C++, using LLVM. +The source code is [available on Github](https://github.com/NASA-SW-VnV/ikos). + ## Runtime Checkers ### Code Coverage Analysis From 11223462473a4fe8d114a972755ae97f70c73a0e Mon Sep 17 00:00:00 2001 From: Erik Rigtorp Date: Fri, 24 May 2019 17:31:33 -0500 Subject: [PATCH 081/123] Add clang-format instructions for CLion --- 03-Style.md | 1 + 1 file changed, 1 insertion(+) diff --git a/03-Style.md b/03-Style.md index bc9f545..1118c5a 100644 --- a/03-Style.md +++ b/03-Style.md @@ -15,6 +15,7 @@ Whatever style guidelines you establish, be sure to implement a `.clang-format` Every IDE and many editors have support for clang-format built in or easily installable with an add-in. + * CLion: https://www.jetbrains.com/help/clion/clangformat-as-alternative-formatter.html * VSCode https://marketplace.visualstudio.com/items?itemName=xaver.clang-format * VisualStudio https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat#review-details * Resharper++: https://www.jetbrains.com/help/resharper/2017.2/Using_Clang_Format.html From a8db0f19ce3daf4516fd343b86e8ed9557f01dd9 Mon Sep 17 00:00:00 2001 From: Erik Rigtorp Date: Fri, 24 May 2019 17:33:57 -0500 Subject: [PATCH 082/123] Update 03-Style.md --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index bc9f545..7db7e64 100644 --- a/03-Style.md +++ b/03-Style.md @@ -15,7 +15,7 @@ Whatever style guidelines you establish, be sure to implement a `.clang-format` Every IDE and many editors have support for clang-format built in or easily installable with an add-in. - * VSCode https://marketplace.visualstudio.com/items?itemName=xaver.clang-format + * VSCode: [Microsoft C/C++ extension for VS Code](https://github.com/Microsoft/vscode-cpptools) * VisualStudio https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat#review-details * Resharper++: https://www.jetbrains.com/help/resharper/2017.2/Using_Clang_Format.html * Vim From 4e3b84127705d09cec2f08299a1eada9dd87a012 Mon Sep 17 00:00:00 2001 From: Morgan Creekmore Date: Thu, 5 Sep 2019 17:27:25 -0500 Subject: [PATCH 083/123] Add vcpkg to package managers --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c635a3b..5fe0bc3 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -47,6 +47,7 @@ Package management is an important topic in C++, with currently no clear winner. * [qpm](https://www.qpm.io/) - Package manager for Qt * [build2](https://build2.org/) - cargo-like package management for C++ * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more + * [Vcpkg](https://github.com/microsoft/vcpkg) - C++ Library Manager for Windows, Linux, and MacOS ## Continuous Integration From 71aaf01ed6120022fc0c8267c14fec4a57ad2667 Mon Sep 17 00:00:00 2001 From: Nikita S Date: Tue, 17 Sep 2019 13:54:53 +0300 Subject: [PATCH 084/123] added vcpkg library manager to Tools section --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c635a3b..ca456ab 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -47,6 +47,7 @@ Package management is an important topic in C++, with currently no clear winner. * [qpm](https://www.qpm.io/) - Package manager for Qt * [build2](https://build2.org/) - cargo-like package management for C++ * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more + * [vcpkg](https://github.com/microsoft/vcpkg) - Microsoft cross-platform library manager, could be used with CMake ## Continuous Integration From f4be7216521df4342221232860bd505395834f6d Mon Sep 17 00:00:00 2001 From: Eric Curtin Date: Sun, 3 Nov 2019 14:17:38 +0000 Subject: [PATCH 085/123] rmf.io is dead --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index 277640a..241f5c7 100644 --- a/03-Style.md +++ b/03-Style.md @@ -453,5 +453,5 @@ The Rule of Zero states that you do not provide any of the functions that the co The goal is to let the compiler provide optimal versions that are automatically maintained when more member variables are added. -The [original article](https://rmf.io/cxx11/rule-of-zero) provides the background, while a [follow up article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) explains techniques for implementing nearly 100% of the time. +[This article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) provides a background and explains techniques for implementing nearly 100% of the time. From 47e65a5359f6c6081ec027554e93a0c9fa2d77b1 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 8 Dec 2019 13:16:26 -0800 Subject: [PATCH 086/123] Add files via upload --- Sorting in C (qsort) vs C++ (std sort).pdf | Bin 0 -> 951322 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Sorting in C (qsort) vs C++ (std sort).pdf diff --git a/Sorting in C (qsort) vs C++ (std sort).pdf b/Sorting in C (qsort) vs C++ (std sort).pdf new file mode 100644 index 0000000000000000000000000000000000000000..57f782dd3600c337263284e84f3546d9acc74777 GIT binary patch literal 951322 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

obIyv#@>5or?}ql-`0 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�B-NwNg~IA%cl#L1u#EKx^tTKITz+ZJ} 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Ï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 z z`}<@_lP)hn4QqG>jYzdBe&i4;lJrbj6-&s1t{nP27L9jVqD9SLqhgv}FQyFsEb$1d z#BX0g=Lew)MI_t6Zflm;9afM2FS$zPu|rHzaV{nJ$?dH`$^8SHFa+-5GQ~QoKG;N% zqOlOs{WP%IV?X6Aku4EQ+5k@y1q{Qnq4CXV)C`cwDGmPQTB<==MKdsVEU@jG67!y` zAUy`sLQF&#$E8#O^+MV3a4VKh=4G|vq# zyOA=eS1`1AJNaax*|zKG%sXBRd`%+>o0aOkZ$6#9+@u^(K2-fsSF-ZZ64MfoQDu24 zlzFyxUrEp6=)4?6AVNZFQ4Gc@|5*57J3TQ|ehg*>5oUAxxT$H~X4bsSd|4TrR#O)f zmc9++Ypy$=P`?d?H@D+ml*)EFPU|QynOX1$x7Z37eq+rAHcnTAW9RiXDf?O5>Y1PCOilqwafZ#exHl@~cmZfyu@(1W{rrXZ$G{2pI(PpzP$92G(Blu1F#2Q@IaqOP{M~6QYrk$c`A~+=q=~C zrks1^K6O?Tl1@sQEUDRBsuLl|t+Rl1{+q9OI^_m_?jLXm2RFofigq^HLWUNGoH!cxY>v5y1 z%rjttjFx~WboA0_dd$K{PV54BvlV6F$(mwf=*99k;DWD*xo6=5kiloz{igAMD+$A^ z5mLcZ=0fow_(O@2uHX@)QU?U=1nz(TRvANvhBqRKTS}~>*SOTgsi@r4*8TYm%IDA` zy^z&mb5r)1v{pyuZLVcyEtq<>9jW|~P%-MJwe&99?=oS8cQ;b92q`Y0;bA!l6w03a zc}R8vp97OVEkNP<1x5TJi?xA*MJ+5^T?jWxpdXSrdQ`y=@Bwv1Vj72m8sJrz_}?Y- z!U$PDJv!QU_cCks_4YEa%NHQhuC^zXAC@7VGLJ^3+%C$AbZHDTJTFJ9 zxSrDs%rJ+l>QXgSXM#!9nd13C-oVlY1zHnGHCbXVq}IdfLml+qjSw-2iO_v6(Ti`Js_=ak0)zIbgl&gj(#87JIf`0cQnleF{5kvgeQmEvC0J6i&01D2} zMMC!7fGMKltIDooRzxIP4vnKPwQD08k!Ko!jId6vV6}7~jr%!f8)B$=DCO0*_kl8) zhJD#}9z*i5JXki{x+>L&l3Ghw3-})lvbbxdsj=t#MAD6L#m96)(?0XybCJZFqNlgK z&`>PrLFZd3=Y7id%h4I4`Nn#iSm#pvg2s%J_PoUel{nS#%s1ji(dlIrg>eJ^L59u;b~?uXjx%5JO;hG_>*|Q|x{+`{FbU!nzoUzC*VJ zuzg>OO=K*Y?g+RU^U;czyn=>BGu}%!2!e?*R>>O^%`+;enZwk)TrN%mmh5a63vbGl zvc32|a88PyfKO{=nxWEp3BP|OAQ$tQ$1{bcbi0&03&h33h2V=p^5;<#;Pnak;EBE@ zo9v0n3CRr)$LAX*X}CsfX+c|XJmrFlE3E3H$I`)i!au=9OspH)ow8kC4uW6xoAV@$ z5nQ%HN+z#JP7jB~-^vt%mr!IwoM z|IHK(=NvkspkEE{3=j8A+@Vi4f*2+iH6K@gLi2U{=!_;rVLDPJ_o^F{Xe|3{-bVzB zfJPny4Tiv~3g?zSIJYyqE3Sg_mB8*1wtjz1Aqh@~g+-^kUTw|(1-R)8p1b&Q&X8vwj96#(^nO()mnH8i+*I% zDaSc&ibyqhUWVoe=U6fZ0EJ<(x_+ zdmW+_E3Op8s+R=6KA`XE4)L{jCSlJGQIs}Q3?(5soyyQvS&U7NR1kxx@;ZIRFJz$c zA^v`zOx3f&TxtHY(#-2%;pgg9&_PhXV?tuNZ)-zYD)GsyR;N2l*;XagFe`E#-k924 za@MN46x%8(OWC(GxktEYrQa7I%ITLO0bGC~zz?Np=zlS8G=79Q;Jj8h5 zO@RpwsK+$FK(J|jkz?NCa4YRZlIGIhRI0Ju-SdU*iY0N2#D@RgSD_q*y{4#0-DyYk zaeVTC1CKS>YF3~>v`V)Gy@v(t=Mpj=B#bNk1DxSniRh|bAADzMNNS=<^TU#oofY&1 zX`R(DL<^j)=;)66>k;tvR(O^csBsY$?k~(#SMjK~NYslF9UBt@vd2c7JRS|8dCCBh zzK}Yyr<=f~IPTC!!B^o;_+yTP)L*MpENWI0Au;#ly(izpr)TcwwUID?Qn9u3N_^Z6 z8n&g?0)upwtJda~gm06;OlA)@a1S7C&~Iso-dW}1f%75?KZ>DnRBY*ZcEDLYQF#a@0Yn3imOW z;99GGLzkyF2YGhNhFoq+uJy}~IX<6uNYOHITn3c{xDL-~E*jSgOq@WwPAZPm9%Axi zf`62n`MBsZD`>#S5D4F|)6KBcorV5nIkj>{kihH8A`)=eD2|eV;Ik0V=OK?@?RFYw z`CT|_Kg;#IYWkvh7Pf+Y?!|B~!=}qKt(+RBvk>t7wGZFHA<1u)CXVR7Xiyk56CAF^vS>~hv zcu|4a1`LpUE!!dEFR_ij*Q(yqJ*Nd>Jp5Rg+fE<*&f!=5hpxd__yD5M*hfa#xHs(6 zPcgrOVP*3HAvO0l_kq0+sCWGg0{;sA47;+TRn1w}nbrAayrhM@rpO1K!_0{oJkkI> z)F3Px;EpLMPSgd1p#VkHDP`W$wycm2s3~9jRhozq8Gq^Uoi!+=_XJH%4 zn`N;}M;LKGlSh%x-8h8j$Fg)#%kP}HIPElIv-?Qk$F6B=E}ir9oZ?kODIngn-66WqMYNc z5I(T{ZO-4kdss)S>Ka|S!k@Joo~QNLfqn)snI3uD%?c(*6(+DtDN`yrBAo|G;fK%e zCi^9k9smQop`p@`eC|&pgp>KpP)_KrxjQKEvtsi{z=Lz# zz(o<e5{FFXN4DLwB$zAtq zuZ^f2XV|Hc;%?-xZ$c_b8t`R$JGg=pW07>Wu;-@lEW5XPL!BOv?8I%{50VtX>erJ0S*J{WLI&T_+ z!r2yACq&+@cV&D)>6CETv{4$3ae}_IAasodvsj-+6~GOe!yt(7!!sI34E=rprH?4s z=j}f2t;&VAONx(rBs>Sl;W%Z!XHP!3PZPmuK{5dO+nQTA_vE?5p)>qZu`?vQ%+ z=0}8xI~#Gwr#>GbW|EB<$K(mDUanqmn0xa}m#vU|`(5H*8SwiWB{M;IS0TVBqb&RG z4$_W;Z8;~5^X&{G^t%>44Zj%2+9t8jl-SX-rf3S82r^tuz?3GwmN==oB4Xt>Dh!6t zVrd;==fjUOC_UU3xAt<{``j!`H?WA&>z-rw(f+ub3167pmvP3-C$9;g7SF2&Juhuo zzCCwnEX`obG<{h|$4jrDmJNPgxp&x3!{V%U9rPSnKVn>-MEQ-Sfl{F$ej-n>IEU$v z*`IfNe4CjqW1X<+d_o^{{57xNSt)P^a*t!}I7wQ*<`AXG$oKkzgKd)Ii z3t(rvT??=>saMb(3iY4n@XxnNJg@MRy3kD4~MJU0UY*S5A z8@B7AQ?KzoC(B;VS_zy|(`=8GhwHr!UM`-ds`WCH_V%_j{dw1bEuR!4v>vu6QS)C$ z8|v%D!`UsZeo6!zj4KhI4$=B+%sY2CU{j-y1`U@ik1@|X(Q3DoD85V3%%Q7!Ykr-^ ztef;;yJ1UZqoc-jC3jigoBgX+RNjl3;vaOzu+oTWpNKP}(wCfE8$|au1cd zr+!GFW!dho>|iFleI zQK%-rE}g(LUic&H3@X*Rzw_$Zf8t>=bE&9Xsdj{mhEn4~}QIA8f9H4K_@7#bWoIqt%SbpRWtE{uj=)y&91duBEm?LqOE=#VfLts6W|))-SO*Y0U^2E6-KF?#Q!Vi1cARj4TjJS>(J~?p}ATg6=Oa1Xy%%OHXc0yXZ}l<4p0LrZ!Vr1r+B1wnq~ z>TP4YJKGEE3v_CqcCY(0B2Re`FMrCluYl_}e>-;HbxGi6oKQ6K$r1%uTG6<(uBCJN z(590kf46pGY^CUVzN(gZ-LbhJGpmXhPjFd4`Yk5#+Nx-?z_rt`EN2sDt|x<~E_H*v zpvw<;Q&~|jovh&UTi6u@>+{0ZD>$OB^GsYO)}dvgc@1OfbzJ%Sm$Np|l*r*Dr_yo! z7Yo|C+si()qtb+>B(f^SyRXE;`I17BuAXsY@IwcXc{tUUL@()L3Z6M}nuJdR~ zf`)uv4by7|ai%;NTIONgBmZ^_!u}o=Sc)hyiScBd!|vv?+U&PlJ!Ls97FuB5U`KM_ ztjA^!(jXk64oNg8&TKou?7l71uxk|ABgSmp`J&h%n9-CB_Ip9@@u5Kn4glt*+pFv@ z3`8s%PM_9&P7I3KTQOG*&K%!@EVUsFu@gya{srd2rSy%{dC~m=^XRTND@4q%?HT_9 z^Kt=TUe2?4h0DtyFmJVq_c5j1aieVgiNif^wZ9IoMw7cD-2ExR{U{tSD?R@}MG4`{ z8;EtPNq zGw^hDbWH!}m^>pDGZQT{9R#(ggRX_CKChLrg&{7@f2nXiSOji;oi1N;<* zKf)R*8@VtKVdGQDm0`66sUi?!+(i+|7qd+pZmyvi+TT=#{R#L z$^ZR0{6B4Z0e>_LJ;22K@0ynuklWJGGHK!hj?F)8xBn%P_n%q3{}aQb!DV1%q+$f* zy@3ArZ$KRb>pyh6|A+eBf91*yOiWY&2#^H;1O8{rj^WSO|96}EpJG&cT84j4Q8i;% z&3b8m1YN!(cCJy0L67GI!XDKk+tq-KK71*ua0u$BjdYJ`%Azd58jJ2GIZpZ*3Q2uv znIE}6T9?WN83ZjT2y|^#1A6;`QlJ`ZR}!EOzNvQx71rLYZUm}d79668bT}Oh*#4w? z+r}-T=cqjz7poT2e(F`8b-kz@cUdLRl)c~e7O8N^>+y(OX0MGkXsQ7!7E+twB%lru z?0`($gh%M}%Xxmn=fC|@xBw}T&cAK+%W|~yy0vY}u&ALJ9-54Kxv-+I;Y1rohnR`a z%})V;&VeCChe$*ubWN#*HZf9>YVLbI=$}{Xa%eYQb6TpKvH3(BGw}P#(WQovt@`h8 zN3@Lpm%{$<*Vdma74Uw*r)zKc=R(D$mbZ4a(>IjYwX&D7v!?v}#rVH&mj7}z|Fv2E z>ooZ1w+g_S{rB_Y@69qJpqc;A%`yuuE$cs@C+BXE9t!sfpDm9Q5*x!3*o1@z&2e~N zQ&I2&{$|(VWmHoT6UKoa%(uhBB`7AsFSJ&u*H>5`FH|HJ+(~86I+@iF;)zx;%IN`G}<+uTjRbbXt+l;Q#Qp=pLhR9RR( zywI%M-&Ow-dkGYMabb00=WV(ExcQ}73Pk0_L3y^K(MZ?`=_25Rg zh3RgJ))>)Rio6`Du9EGYl>?W9mMbM~0xRV&&A(q46qn^Vp zt0=^~G@P}!>AQn6;RT9HX2S39fvfwrs*(g5)3v#iY7q|p$}OPgKL<=%NFwko?$Lx) zDzS5OI_DmWf) z@7~HL1wTiM>&tT?5$P%{W-NkEQ~J@nx;*j1>~{3ND2qWWR7v0f4&6F5)iXl+CMfF- zDh1>HZ{B_WWb2QwcJa)(Df0>bzt%xy2!ne>YrJD3ITs#r8wd>P->~08Cb7!cGT*AdO+U0EOK%LDwnGe2zP zxad!%SbdDY`E}A0%YXTGX%sled!BPdQDg~))ckqCQ>6E9S&6;VS^U58%yk5{JyA<= zj(rrszRgH(@oYvI5C-aV*!c3hVOhm$J$Cl5EKP2B!;0|KM0oGOL`unD+clVO9ALR{r{58{1QYO#F3he+byC4oBH=o6w zU1(M`H^8rZIa{@!y|!z0=Br;n)6l7LB~E)d4p}|U?1s18Mt3S*UEiBA4(>UyDew1S zH=!Q@3>5EE>`q7!4Mh2)atBrC(_0aHX9+H|mD$yPTBK>3-rXLH?JrU=15b%Rk0vj+ zM=3-;%it5UnLN+XBx*iI?o){@X;-yF-xu@a7r;##Zu^JR;G77v;T8wRyfKa`OLfyW zDh=72JRUVIebVeK{+jbQwjfSVeZpSFm|UNqfiCWeokq_`&sWNK%NJV)b_U>-bQAqG z4pL$EZ))~an<|;r@_RpGM7BjxFqhZxXu15?GjrtOa= zLt^^V$yVa61iSWun#|(pSX~1t$S;Sut`U*a;rQeoB~dhy>)WL&lx*H9rgvdId#2sQ z;p=+|KO-Nob>3j02IKfT@M^>6H(>$%y7C*;6%*Q>XKbGW1Z)F?5nqo#e%OVZ)Is)}(vO=#Yn$c_Q zv5s-s>y}+3?jZnTp^x!=fW{Y7!qbXh!C3coK6a0o;k@l@z-%?$V z2ZEmBxubed&e3$ScevDtu=A#Os5hBU4-o7WLh7I|gAl5u_$M(=a0ohRC7&Bfm$h&t zm1#9I~8&`unHbI#Lr(COK#x?=2lej7OZ+V_EbU~Nr+)%&1jk%jb_ zcbOdtkjDEo!Y(s;-Ox7mvyO?z;!dyESu)M5vbnq?ZBOeT32vEbnA(9vN4&!GsCSnG zU*E`v-lSc!Ph3wVwuaI7eQn#eyK39E zy=vRGZQHhO+wH3DRqOV7@7edf`<#<~_P;lsNzzou*0>*eK4nxNP6&oOAAlS;pJk{Jk*F0!A^@Aqch3NOJ%I-0mo|0 z93Q$ojV-A^3tumZ9}}$=o$`Slx`a5`L0n8c6?5b*E z!Al{=Fl8K+e!#E(hDBZxQh zxRf!&F*IV?Mwtg+C>+BHNXbaqNT~^FhH?^elyc_M_FU*Cc(Ob>ZwE`cCA`UR+UGwv zTGO}u;16hts)Vjvc~oB{?1{2WWsqnp?<@7Ho2y1SCN;wjkR^?>z0>Vm)TF9mwFAp z!3gYC0TwFAOQ01I5Wg!Ymx28GYdQ0-6>d-=yyQMTmjfX_NC5mbM{_y8Gzs*DK#t!L z%8Z^?w=`_83s?V>#u79c@sXwp3 zuWzW|uU|G|%hGe_J^5&OSU+i;Db01wk>kkq;yv@)Iwdc>iH?cwVd7+c;}g@v^EUsR zE2f9>Ieh9^C>Oi)YlC-#-Q(eOWq!Jlqwws6m-kui1TJgS^SZ{-HEYxRdc`sOq+%8| zOY3z-$8>MXH_QEd>LuNEHYyvFr!f2VIDLVw_w{(X*Jm%e7KA6Hhx-is^gHzXc)wqp zJ1r92@s9svkw7Rg4OY{*SxSp@d5i9YKa>*5)Rx9j_u-P zSeCiSpI&)33$fl=s>Edcwn$uWXnUF7W;>$@kPbO%PeWM8(p#q=bDp)CfJ+H_T>iOE zCa2$6Sw^DTt|G(y&I7hWXYhKDELo*S%7Gm#A*5VoP|IpiekPk`{Jal!@YhnRMAj_~ zix#xx?z!T!^GrhtZiSTf`b?_+0nyq_TQg@>4K|&n16<{x?8eME+Um-_cv7shndNqs zzax=(>2fV8JC4M;Xc@G(@Yefxgvjm)sg&k}mKkAG@DW^8$ zrIjJ_3ySJ*3)PYkv%}315dGv+2_Trpf%T@sc?!r(tVDl7m>bi&YFm3aaC3|1i;$wl z7c$lZ_NwF+G*k&}yhcH$xkT8VOT$^LR7Wm{8yd+0K?gL#drM1gVhpy(%t%oZl>tGe z%;wi?&^KLsOspp&x|cp^CT=qKXY+;bIsxb!7k82~DcGD}C9u;GA!u5G$(>jUh|Se> zU0h|w840=t=}QZUq`I=DA(+@?-3I+3uao~$?4tis?8=n?rPyWvOR*FB@#_#X=&<(I zAl|dgg!PHH=&<6~!tCxtibNoLs@AYk$xA(x8VId6>dYV63hT|at}RFOnK-9cqlQhU zfb^K)GV7n;Gal+NQx7dij2w4t^q2rM@4|bIy{yREyr+e&W^!*V$qbn6^LMP~3>Ouk zCqy2o+;pKrdxME@h1lWvLPqyYZ<#-sZ~`I~sXlNlYX>rK(X{>S+aP)aC+(oFgMn|I z-9YeyWY?hI^8i@~TMYnQ`Yvvj)<^{<4!$)=lBWV>KW@lhU6uxkfO(jC(pRufF##UJ z`Jp__VvhfhkJF0ZCcc}toCb8@pfm_@^9bN^mX2#h7^EZdv>bs+!HU;d65;i@ETDS4 z+^jCGPF22Ic1De!TDL976AF&6qp=dIX9{PhN6EE4w*d`rhe~qUSrEB)l+KryaWE`9 zuF2XD1SErsYk`kdy9Sh=xrUS9rPyQ>)I=u4?Oh1X88Nw3@Gu+w!u!R4?&Iy=Fl7Gp1cfv{LA zgC-t;^5TdQK8nk;5_gB#7=+65`(r2|%#G=~odD_C$;5KJ)?Ki0R4hSAXfd`{CM3>j zmS~8X8B+l|He6(>&&XJP1kDVQm9~Um3*ibf7zpej0^2yoC~hz&tY#`UHYtlz!=Wb- zpt^G7y{z&v|0&r(?Mbt@xwGuKgT(%U;DQ*^z6OgwWO5LKN7XOPU^J`6fiwX3S9g-Zt`~yeYv~Cz zMXSsAaqvo?a-_G%NMeu9 z;IA51=LnZ5Gn0a+gx9xOCZ(6NVybY7WXJz9XLP|kXO=5-*qyiDjM;89U*s8WvF7Ti zJ?DFNdfsw3m7BdPBxtbSLJquKPfL*=(+1HeZQ@U~3L`N>1dphmo4@YQ=;z<*FLpxOL^^^!69q=EisZw||$)usd|461rw#YU(n#T4pA- zIb~2=&<>FXPd$aX_GQ~>_`HenemVB{QEMq79gnh7BT+MGDG%CX0-D3yl2WRVBhLk^ z<=tAY(*`oC*LYQMHm~!6-j^wD55ywP%7H*iT-x7*{!91s^2Xj*z{gOH*w9cB178px z;&mmd20S_Oh|yy&53+`na_nt>fKQue?QuL}cJ@zPiHk_)k)q&q82vV? zQgm~dpu}y#d)C7KXc`OwmW`r@{weYRmenb7w`D;^pwNK<#6&0LWSfm-pNT6Y>Vg9U zh5PFS&Ls*ja$1=bgjT0)4>(gu0Pq;oQ#cfCBXo@KQ*0|Fp$VkL9K^*0!|{&xsm{8} zc83F}p1Ql}S9M@wGqD@aE6~U{aGHtr$yOJcFZ}IpM}zn8R4co!vTzTpbYfDqDZ5%a z-g>XXWS=Pw{1qp?G6%#-=r3^$aKRBBQIG5jY6Kw43T%5CJxQOBsgxj@gK^~NNHl@D z;TR-p1hM{U5_RxIsB`C^=f z&{L?C`PrBcHhHxpc`{FRpnuPI$$r!dM%#w^ShUwW9jp;DHlUfp8Fp%1&IMUE#Q)HP zLOfQjaEE!|tCsnw8+M}PF_%Jkjd6?IMJjDZkSGRox~O#}Jw$r+juReUJ7gKJ=I#pQ z_DXUIj|X9RS><4MYSE3$n4&a=h*xWD{BAD9oNt{p(o}1kbX$99S<@p;hPLE)^*EO9 z!k|qPrSaVI8*m9tkmi2O>w<;p%B}i(@Yk>FR{qsnGL?O3}>%4U3l8;EjkAC_o;=q%uv}-pX!(7vV+G3{ zx7z^MOOZUjn(&GSr!q%{3Ni@d37RlaLmb0D}K zFqZdz>_hxQ&3!k3f9%5}Bi_-&D>7yb@W3YWU6GS|wBqt12jq1L*S?8lKz#q=&jL zQlFF7t(Y8rF^zXgz4ZwZ@0?SX;)glCw>ONc>SlHUxY+vI9IuVO>%*5IAC<8YGCnkt zDH1_*e}mOb!(xo~a`a+f4Kx%EsjCvGa((gWup_Z-eIv@ILr+b-D2{E&6xe;uE8LPe zWe%s<5b9Xk%v#g|ySOF`SBXf@CaSo;kG>@0<$@gc;e@;()4*xg9p9LeOMD zkb0}`CS?_BsoQ@uufe@t8oXB_q~n?PqDr&n9<0f-juXr00%~L<$JpYZEy=JlKK@=c zW+DXj`MS zY9;Uc^02$k^GElMS}MMI*0?$hn;NQ;{yPXA%!rD!P#=U zeD&%utJX!t1R>Z5AzE&Qe6vqdX@muWp|=NpSyQK&{vA)bfj-+sQ|BWLiF8htzur9g zUPT{@!mN{WnzhDvqS_rFm^IIyjbA%pwAn|)8;E(J_g;f@$n7dS zHoE;z0J@n6tivQfgFgPozcjApE38B-%?zxMdps_dN*(fY`pP&pycqGrYiLK_Rsi0S z4WdJ*>9$5*n)wwipO`4Z;ig%iHh#Fv#I}Xr&VPkjPN|iOc{<2?I!le+N~}qns<&cn z9!HMp1V!>q+|7H0aBxuRPIEeKsqDLwmkm84h)AXKtp!AY*@2qT#}o2dY5Ky zlE-hZj?Uh&#;du!zJZVJY*PAKqnTZid^q)Hd8A&WcKyX*E{&*FRkG%pn=~1rnzT!# z95!o0lnc}B=(R5J+%&vLQKe6J@KHt<(>b*MddH5f$g*smBNWTivP%UV;nwbrzTIkv z-3s9fiE+)lywn=;V=w;1%;5`>X_-nde!gKoeW%Mi>FX4p8CX4RuiNa)=YxltN_5p> zA!goDbmQHGRGVx7AJ-)Bef0HAI}cS$O%a3sR~VR${?QNN ze)L1zhecE0FYR8vfAmApV@KNmS3fl4zf6?)M?WO~TfN_+KlQOeS!l%cOXPUR@FiuH z&f~ArpxeqD<0)#`Q^MsNdKR5O37P&cHfoFTi+iq`eKJa!gB3rc4S0@yKZ+>~fUVr<) zIau?VBh)4)W^egEKW^&cQtE@lzUp$=+{tkK1**2eLXj z*O*y~3U_4HVLh6~uW=UJr-n}mJ#%4P44?cg5b}au2W@=MF_?n;)m*&#F=v@DP z-yJt`oGgFXcBq&OczmB)_PsG`dzex>@s%Hf&`}e5X#sv|{ZvgmL*wCiPtQ`3`_!D2 z^EzndcHyE9kv!}MD%NkX+nGFTW&WGE0PG0M=y<}-C5dI8j`5h5$9XB1CxP{&_6??BlaJzlY$B9j#?tWlJ-35q$utCSo%4r zN_GXY&4xG+D`VQq$gmHInZyUM-YPLzbFVu5JvdA=gHklMdnHr)5+3?*YoD*QrS8=h zYK1$3rH_P2Wz-gGSc-xb{k`*FWER8VMt5xeqk56vJ{#i>YqC@Hyqo!PrA>j~;4Z`? z6bA|uL{}HkBMddm7ua&AtMb1%2Q#)h+K;JWG0-Aw(TnYnuQjP?O5+fqk^%ZJupEge9?T{@yDXc*K4N+4Q=LSuIZ+W)y@67@oM;G$&(B6A)4xYk|KaETM>O@r?lJsKUH-4p6w}YLB|8hpe-%yrV*J^V zWc&g62xysp(kq5vKP}czH1)Gk$^OqAB>~5O{QCbKP5mo;_)jIozpeQFSJBkJ4$=Q# z1;ih-PK)_xsFVF?o$x22V*c?FS$~cX3&+2{WcyDbA`{~ejrgxa_`kx4|NPkhjYIs& zO8)s^V`igc`I+J5_&@N7%>Tx1{#Q-XkGlBpt%*+jv_%jDO7OFLL}wNq81BU^if|ey zuH8Jo#XCTTwsqbJ!ofhRZC5=Smi$ZGNfrsYfQAk=DJ_Vt$svp8X%P}wsXZ%B{;)2U zO9a2T4O;;pKGrmlX-(?*zI?gOZ+AF^uFkXH(?Fq-7+PIM{gsGjMdy3B8Y?ju8W*-W z@){5t3VwYvq&#eI#h3^{4Y<^M#|v~~C$CCgG+2a0yswM53V({QV@ecw8n~S*{XULW z`{l!ZAC@{dVtiRbmco@n4N%aiMHuHlrx%kcc#((YgwKE#_LIxi$Ve4Z=5w?>{&ueV zG`;Kt<9D;&?L<*&6tt%Umjnj?00j{mEZ_%q-7 z?=OTOC($kGDE;*P`+MpzXG;1y2eUq4WP{x6@m#v9klV$VxM+c;tX z^8kK?Gbn;wKsj9+Ac&0{JjcvHoUYx6(sgkUW^V=%z^1?|6v7Z1R3A~!CU?64IPOtZ z2ss9X)d9wGWH_l@f8czzX9RZU-XNkqA{?}LeV}|v3qM92>cJk9JGinzht?M~VFNwl z0VW7k2o4A|5H3M#{7RuR!iRCqhEQ_S-_gd_|DCaCkai!gW+E~bbH8@ro?sfcccTrl6 zXc=)asR$>+G|+b+S6F^-GTndXhWgV?Ajpbr`@v{3i}?n?>hYkM{pW((WFUNl?Drbe zjTZ3Z(EAzkJ+a7`ry(AlzJf}S-S4q#Y=gM(*njV3h!ra#)OsT}6amMHpNm@(=4g?5 z0hPYIqT=oNf^i|daeQ0-hD(tN)2ez>GDFu3ku(R$fS852DON42)U6BOE$E^}_625v zfV<=hXp=UxF}?49Vt?u!ip>XDg+GVdv)M)qf~7c-H7oYY1$F`#kTZ^-{GAUp0f+z> z`C#(pcT0Z7O`&kafQ?WqOT!gTIbkgi9h`3)Mh9^gu-7B0EO1vHP>|v$X*8sSwqRtz11X2%Mkh{byFGeZd z?^sr;NB$(}l#=q`{)(8g7)LPTA3YX(Yv)qlI7nxqHa56Ux?xp&4YCl(D)u)g6*Y%- zgRnk$GUaGX)=lCH)!4C`wBFJ}t4wOCrOg`|yR%4`*FviNMpEDdoD#R#3SVVMI5%9@ z{j^Jzo7>^w!emj*_#W;J@mPt9MJr$F1H>bEB%LidRw0!asId*-*aIGH=X z0x>u1L<3@g#WbW#3vQMF-W4p3w!S1kC`EWfgd+|jZi2d+qec^|UOBW8h0=VWQ zls3TK&fbhZ0;KVcK7s>@B4=v%n!#9sC&CeYam{sS!D+dBEI5W6BjT0l3OmsWLQ)X$ z&rPqD5bLjmy1?I3 zu6$!n^5P7>NElI!OYH=6>W~AEgOqZ!hWR<*h^&e1nPZR;!12rU1=?j?qBh~<4A~Uh zuoG!Aw$|-uA&!9#f8uat4jJX6o!686;WraJJv455fF*Tp6y`8=>>sc0iz*Dsm?Fy1-_w=0>I<=gi&8tSA zi%NS(M51OXohQ#0&E|`~H#O!Eq!T2yt@O6YJ`V6@>{GWRC9ucc(?x2O=pth#xFmN6 z7@=y#h~Xw~s_~a86UxRybQGS#XMv`?xx(U__(nGS`Saqy2=(FF6|cL8KN;pD;`6~3 zj@9Ow&p1N>hY<1gZpg`a_&9g~BACT5RuqMOa^V1t{gaP;b0pabs72(MM`+(=1r4#>3@H02|DErc; zh$F-fXf)A$y}EvHEta7s`)4=PdTNky!Lqf$)(z@LjI9vg8`=mx=OGoK8u|uVCXKq1 zc`5|(Qf-egX-_L_q!uEHFBSMO6KX@BBEz{go#+`m!8H-*XU>^@0GZ^O%)M>GcE<7N zVnib@FBQv82QDnDhnLZuxXO<1tWTHcVUOA8rWVWX;eR@9Md0x_d9S(M|Fnc&9=96_ z;qwu&;Ab~e)*@$^yBy_4ssEImkH7Z`T?|>=b3YahdcF!VjuPt8!m)9h~k5! zmTNq3{`4#o?p7^_p-pKFX(AYIPj-)Pk9W^!&s+d;2Ym(_KN8ZgMxADdrUqS0Sj0>B z!}Bib1%6*^AACQlC|Kd3E}YQI^I7+Y*5P%>wS7 zkbVQA053}CoAF|P7)(z!m7VQke+W#!nflnC%1;kuGGYQ|@@AqoRWv!C4w^pQVzMdK zvj5J0FMGG$-gV$R_ZjQn_U`no^o;bJ+rGMXXzj?P?{Tbo+sbf6J(-y0m`To|<|WS# zEZ39a;eEVa`c(2Py-t7ISi)7(Dgi6$D9tFXD8*4SRvK0URhs0}elu7JjpS?cPJ7LN z6q*c`z$f!byEXWGh@OZqCoA`5;b3v^E7QaDx;UOI-NW+wc4(PcD{Yf?nPZjHW!+%z zu>E_b=<)KzwAaVwYh3wmMxbFI4PqZ0gWq8&n1H2GZ+q{)QB_*s$>qB!Z{7(!J1JTyKraSqnl z;NTrnAVDrQjrMQ_i%-(k%?o(KqAmUM+dE*m%B&hzay{kIN&nMhOD+>{WhpKHbRk<} zfXA)FOHN5C0H{rdzk?~=rTVWEXbCo~Lk_JFq-3gVoRCl0=2%3MqD?&N^Z*oS1@@E6 zrFFc7u|~jp7q0=m^>Q5=2Sb`csoY$q{b-!iE3TxhS%;MpP?Zd9L)V7l$^tdp*j2R^ z^e_6TtSGTb&!c6}NlhBhqi!^htYE8}s-bjo{4;q~mpHH*$Wn6DtZ=4Gd!|Km#51&47``ncwk_pMebt~xSkL%8he_SYu2!$w;$RwmDe?IH({PNauvUKr zeyR}-kW13w;^NlzRHO#xU%26GouPHr1=|g5{PC68Ddbrr@nwHc42tU-%Ea5witsl4 zd=kblu*OVf0*g`WTTw{$3DqOw9;hv`v`^V0HzTwIX!P^PtR=lhy&kJhoj^U~e}qJT z4;RI>^=gRsJu=d|j($pr=Ni`(L~{xc<)$*Ms;y>T#P*dXfC!RQs)T0Y`LSX;O2wvy z5H#!z_MJHcp?6MO5PhN6a5kWN#5#YrfI7ssEVh7p#H0~y!ZirpDXajb33!;nojH*C z^Q4IueI}etgB=qP)dglR#=1aD0cyE!21>&BlxNg`8ve@g$$<8@z%Bu9?wtg zkAxdojQ%@D+aHiie_nQ|!8&X>0pO+qx-~G%Ka4*_V;#N=f9fa?v#$tyXuBv&XrUWV z`1?6Q_YLSYu9{z?8u*nQpi|_x7et%C*K&*<2Ei$v-ygCdXn_1uhHN{6tS3SCeVi{# zKZvYS@?Ola{aXgVJ3K$}Lm847F^(>T>?pfc=Qg<2Jx=Y=3p?DJLFboVNXF2g&;R3_ z-)MRNG80!g`GIhQ0uT!TFTolKNyWpMrOHzP%>DK0QAqmj1mDJkkpo7&^97<_Ol<%B znc>m#zw(5GDpyu`ye~eldb<6BR{zBml@x(+;5= zOek&{lT6*fUiEj(y5E{;CM=pzIzxjNhV#uPZOaWx&mP{!*$&ATIDb!vg$q8~&uFJU z0CrmwfU0SjiKcuMs|e=-Ol+o$#9kYtxPO~HiOnUA0e& zi?mY`U0!>S40`-gSsl8HkJ0E!IoHL|2eu=$XQoSUhS2N=kE8Bdh-q+KW58|IK?2xc ztV-K#BuLY&jyiLws5I?I7;f9v!JH$z-|M*9uQAJ$j<|3gu1W7jrwe#O8r6UT^K(2T zhY3ZlPyx%7BQjjg0V*1tH^D%gn z6E!iGRDBGnjMuyWi5e3FtQm7uO~sBP4s^irj*=+ASg1~%ijn%0TF4kWDYu1P z$~FfX$Ht!{hY*{T7K=3oiWSj#^TDAbr<)~M{glY1Z8zGiD-!R7UQ z4hdg~GP>ct{Mt{JF*KC%fAl>(Bu6VkWlmKO60(K1{PtF>ym$zG?&8o@RY}(KzTL^N zy{T@cEw^|5WUc)kf4buHE%Q0Geg+@y$ywRy-UB6ESoWBV4i-$OZ7y@$S1&=C@l6oUKNEmjTt+@kAN-{bLkEmqvyF0b)DW`~%g z5NrAYe%}Wt^JhYFHjI>;0TGX;o^pgq*73B-aD@w4UT?9mG@C;`Bf3mbFb7HhrG|`q z#YqTlKG&(xQCAR;Dh=}Pl@4OW9r7$mgG#ZCft656ktMuAR*b!spFu)<^PCH}*6GHl zui@i(xYYV*E;=|9&wS&lrLg=@W~+6FseyvZMx?tA>PoWFtj*SUr;$;z%%gYa0mvrG4klS^iVFW2b|u<3?NnK*3eJ7CK;>RZZ;PD2HJ%3w(GI)bddh{=ggyo^ zukNi*fJg+WE`HPzSqO4#9Ry|@sD%2Y3}$a_zr$l88aYY#5pD7`S@|3^(`#MH2u+Jm zFRe^T9Jm#4qM&kB3#?|CFLU52_T%QdxJk$VKt+Yk4r(STgbUb6-BCoIa+A*G1szf% zijpRsn>s)>%jxh_sVtcV24g$WHOdLKF_RTR1dD1dM}&ZjFP1YZnxrPwn@tV}Lq-aDgh%%k~ynaT?#T?ao{?Ye#w~t3Co>fYrybx7T4cBba8jL_iIhrC zL*EVzBaChuc;#mtt0M`Zut4DavTO%1hz6e=HBKr?+F1$^895`N^gILKtTi=;M_2FZ zPlcbIq@94zG3jDoQ`xQL%@};@12Yh2c zEXAxsQYj{sGQK~EIix_ofG$4bw70M{(LN`=93)HIoB{%(d9)-!a!BmRtP9$HNJVEX zOY4qh?WEZZJ!Vb4u`)b5mnajJR19+q-u51XPv^lAk1?EReJp!=DP$ii+VeE0-u9RlVLu zirevG9JV)KCvrGOpkt4sj&rc`-a25vxA30!)7zdhj7Yb`TKz|N@HpR4^tu}WE{pT z?J#4ag+B}DM&Z%{ur+gIW!weYZ|Wu5;^x0|e(j#ZgmA-~3%3GIEjgAaOt8>vh*NCJ zw;#xVhJbT9IH6|-=Jw9kJ8SsNE9qQ~x~Slw6}m z&a0kDNXTrx$#x|x8p-aL^{{d{5$_e*IT7Tj`nmh6GRV#s zu>f77%{S6!167FXF0F2Z5pY2kpRJZQT-ZDE_O-m}R+ahx?&^-jFET>E<-j0VJlyjbSt{=jcfr zPJ0C+#RAdvD~}|%!-Q$0V`?Xuu#~4q&-f|RtYT>s_Kz2l@4R@ud_-_!MH{BlOiz!a zI4lK}*K=$bA}O09#WbgR`IBT75hqfz-qAu=1L4LNkx6^bjk2mF7p+MtHC8-yj!-YE zl0!w?YFW8gcTy`=&_Ir(W|zi#mtJ0@i)P|oYkl<*d*T$bVCqzhAxBPgXmA{V{0!*+ z+U@GjH+YW>9&G7bYo3H=BLOLi-qmz;RZ?{uqm!~Vc&rJz6!*5W$*9&}jA`IvrD;rR zW>vPWJ5()7IXVqcx+q@TdIU9b6c}viuii|%$>1mKk^B^-{Mqac%YHTFc^;l$(l02Z zS1tHEBmdhS;uwW-2>*xp21P(7{92toNsu?p`wfmkM&=YV>XF0EFu$hST%6Fh)GC#s z$K!3UZMD;DBy%K!Ezd>v-Rr5&731y;LIbWwG5^F+a45i9Dr|%8v77Y$Dvz6oCQLvD z=ATpsDuA>>T`zsZLV$#bML#}4MOddVn3`WMc2XKQ;PXJG(5BLxz zi(8tFOHofe_8CAT&G>{3YH|)uPKFfikGRM91|#J-jh%5uAF%j)dZsVWAi0$jHyZjg zs#R8~Yx^20j%31+bn2RUPl9pXBB~E(f-+>0+X8O^C006iHSu!V9HMxB&>W4jF#E2L zX3b1~K%6dEX33Hnh%8W@Ym)1e1o00g`IE?L1fDt0j&X%Y!`VDIITo80R<4=V4l|w1 z_KBHIZ*z}W@(eM$b=U1YdJ!d5Mfcl&ei%h`?1;RkNx3u%F+gFin7w@4m)Uy-oZ-3K zKp__jpYOE6*SB1l63MX=DK~VC+F%ChSR$W@h?14`(18&H8Dt_P>KbM~sqRhyCAWg?9b&c zO$*W0y|JKysDylfQ#=z;^+9@8N(EyFFF>4>J&lJj?lR0A+MUY|3xmaPAy2dVdDX&) zSii%7Pd>MI4JX%xYRfXUB*qpaiWdW8t^Hx2E@8A#cZe8HV-AQ8ySo+S-Yy9vjNEh+ zWe~G8s$b0HIYk6R;Zl79?53NPgp6@r)Nq`rkjV#c&zfjQD<)7stu@SPG!Egw)mo8B60 zg0jO|#Uf|fieW<%3;My6s#>IFXQ}E9oAxOf8b$$=wAvUH+g4Y5*ow*Wxa+0t*fA^= z(M|+Nimx1%A|QK<5@pQA9GJ%y4RMUtK1U{;>i`DIm|ny_C$)h6O%WxOBM_;`RkF+} zA^I>-mJ+U=n21=AxW1rNEdnA%M7SZ9BxU!`iefbG(QT<)u3TEfK>4-qM(S9h#(9wK1SKMt+UMtX!Y9{s}n^DUyrWp2m;rogc7y(?C z`qkW{6JMQCUEhGmi0dY#0yRN7YR=CGfsQ}omC$_Nc)r>ldGhzSgHmr+M^OhhKrph_ zPCHgfgQWWer@`jt`3Sz3V)ajJeQVeSI-%PKkd;`W)U@vQ4Lf#|Q*OyYs zJ+5xW9JANF8TA zd-8&4#kcPQ2}8+u<^n5B>N9NFm$1KUDYBV3Q_G{HL+r3e#hVy66I@f2^AOFpxw6H` zQO;DXQ(Jd)_19K(@+KE6ydWdY0D@KE^c=9xT=cbih?RPjzZqkZ=lQz27U&gwE9zh` zOmmwd#)*r52Yb|&1BM?f&UTb%{45&hN(`9r%Htj%rUf@S%%UoI3NE`Vbgo7uwOIZ3 zh@4qJ&-j$ZC3ew6r(GBPI~%cRdYBrVAn&yvkcb=U*z=}<&aA5Gl;*5zb@4@wR}HtN zG0(6&hB@Ytdjme%a+_w)RMfDODBDxCyeuri_PIKluEe+*UrrsOS|UgG+GeO{6VVNm zy)TfvQ>ta@LT&?|qzd!^M6x_rGG2Ns;yc*g5Iwn3!vnx}b7qZJXf@ufI_=7uw96a7 z)5fVs`og+QJLzJ!n7vbw1yOqTYjIuq$Ogr7D^i6wTo3hpCt{W-agI$O;~RaVgMW6M zgzLp?O zqq zya8|IvkSup+{tzhVdr9G!#(g)1Fv*AdXX2@JSe|EQa^~vJxLX!bGjlHn$adXslpwa z3>LH^b5j!oqqq>YbR}0^2wGVSr@~dO4p@6Ix*vRLlR+xxMWqx>EE!Bx3}u#ah}P+f z!p3!*g;kVlYx0NS8O=)+to2tI1e?RwY~eTPBgu)iBg5eS=C2@nTaoZ0aPFY61%pL1&iq@OF|5|tXV@9sG zcO(ftqs)W8=fCRnR)$U#-x#X2J;HcX`j;tph&!@&n-K={T8sO`EPo9#i__~E&g1vI zL_7b>P+R-_0qAHMy;-4Z#e&!^d5#NqtIt5Z4PChlAO74;|Ilh9+T zi)T!i!Bk;BUs#)yF0*`XMK$Xlk`s(Sn%vyrwqiVQa~?7{>6x>-v}u++2S#km6370m z?{=!gL3gf9$>!k8;Znq%l7+Ui`N#eh&$p{idS2r@nPoR?(#0ijy|Q$XQnZFlvpH$O zGc%0GGhpI2!*11zD}tYf_^aCje4p4u&4s*eZr(+bpLJrErk={jjNO=W@YS=lfVI68 z{bkA_jIB`la0ax|UB5}rpwiWlPDII{`KU;#WP@C6Y0iq=Ar1zLksg~3-Df_w`>O-8 zoPlekI!&%CJ=R8Mx29fej{7QL;eaF6he9hk7YY zJ)-uYKsy9G$eq=ZiCv-zIzqR|>1#TddvT8Div%$A1ujc-cA>adV z(AbT)%BGi{x!LHrL2W765jwz%H3;^yMHee}UFvn`@gsLmGnje~Q=5lQxTf!Of&Cix zfPPH-om?^7v!Em5zA7Wvi6#N3WC6}SUp*+K5Ly~Ld_$L`_T>2{R@URX_|Y8gXc=`c z*E}h8vmk_%Du6#e{xN;7sPo*~F!?~WctWNWv10}+8m8&tt0i?~4P9Ow=P^!tSD0bA zBv(D{>1(8$Y_Q#LJjTw@S1$#=%dOoVUANT^&FOWGLDlS?caKr6?`@Bum^_^)9s$;o6~g_fti0p8+_F0ZC6a=nPhQssc^G7SnT3v zY?0n7f8*HrSd{2_Adr#$YvvcMrF zo)77i_ZSE4^hx+~j&E(euxvY)UY;q^Q{U8w-av+~ur5w-E3!<*@1xmnm-Xq9n+4Bt zy<@ojM?=S5LC({w?#$Ez|-oDD>Qrq@@zw(i?qV$oPV^(&KsgfsJm zlAUh>i?bZ#L}S{W&xc8CO%f-9x8iujwPs7>zsG?w3mb)~#srzA2ERFkOCs?W2i#pM2K53GZPuT&IuB^xUOB zgZ1n;VqE{u9(cFee{WfnJ8^Qm?{)FGW|*~1OZ|V^yY}dut}NaetJVkxttzVZwOB1h z?&I8Z?=5Wy#pr_}G#WZZ1@TDCmw2QqT`eocsFr%0dX-UPqO@8<>4SK*v`rtOl#WRR zO_@o85@mk(YbD?PomRVM&01#Gy7~{h=j?OtK6~%8_rCl4-K3(}P?MgWRy}rLbj^l~ z_Tp0_n{Qn-}OI!!rT|LmnlGZHeAy6!wvKJ>{mr*r2Nl?~eZ%8~M}|0-;`Gpmi8 zk&{~3vM6urOWjX4>G{ZrcRs$QUrPB)BRBRb zD=r>9`r+}%hqe0iw_8%u3r0U&W7ec`ZjW|D`fq4+Y)sOjl>I}GpRF=#Wc9tPmpoor z7GJxdeAW76gLfa_)UVo^7Z#+nYTRvU!?D%hI_{1`PTR{ieRMi4cj&gPX#=`H zGz!R_E9!p!5s*7i7ks*4NbGyVTg@?6jvKS9VDrGSwJ+w6>zcj1EIuz~a?hF@>(-ig zf6k1B2_2UIVR!o0DM0Rg|K{9rYpPy%;r?T17iHb?<@(ekStpOiPS}|CySw{a%a_h9 zd3na(?B%g_x2LVR|HCKNt;;-kGPU$$R$M?H5ijt(%-1_rS)ZtCuz^S@F#N zrzc$8(PvgnZc(obukHKC-A^X=-JaOHc>1w~RS(Pw7uFm4r{!s%w`lQvLaiHjzcMTP z?{n9be%z$jw68bR%Rb%j=!cJemhfqM{*hbv{qe;9i`TVWayT3xt}*QHgB#9o`C#04 z=eCxv{dn$yj-_iK%-Pa-*qhg+$CVsiUOXpZ)UoN453l~pzJA`tWzC&-?~sN*5kD zKDFJ}xyy2U&jxbm?Tw1NFIM|jh4|6F)nC$uUICJ)G@)OH&WvtCzv{@H=)d+OcZ#S_ zh(~wqGID1`LRV-)uaHAUt8a%c_jyb_robS@zj~&0?sDHl{YQpky9`WBPD@HlkC5Zi zQ-NaIC3#RvsBPO=@JUKd3#W(fXg4rrKw|Tl*lyv0iQ%N=!J#`YPXjS-)X0&;6Gwne zNW%xwW8*`8G<25#Byy+Mh3?AMmIGMNkbzcm3%&o|p;!Lh6u?~2TocHaz&GvV2-#W! z>C(eA)Iyf6;fDd5jsFRW^%1t)+I2Kx10ocxEz@i*@sj|6cACKI6!;YYBYRe&d0q+N z)4-1iT-O6(y^27e6%e11C$IdMFa%^Er2DhbpHVotS8B6o=+7SSCr{97Z!W*{$p>rI zso#D`(}^>eP2RSo)~qvCCcU+6_LQ|#Q@=Vj>{MRQRn1En5v|!J3 z>#qH9+=!VIk~X{5F8n%v#N3@5^73MTvo(CI)U>QXQ+x%NGl)pU5dI$x7}0=)@CZPu^Wi zr+zf3-SZQ}?FY9npR}&Zl2E-~v(pPtm2GM;eZaih%ffGWx$X9Fhk|Om{<5v)=FDe= z-6yYY|9vq{t2cc3h5T=(@0_u-N~Y0d#`&0%gp>8w6tr%A`#nd-mzEsu+xxC9BDu}U zM{e41smAEn*WP)k@imVvepK~my7d!yycNdjS>=Bd`ZMB2xD7u7_6zGwOok~BjS(Vh zR~2peRsj7OKz|0%p8@pe%mDf`fc^}iKLhB`0Qxh4{tTc$1L)5H`ZIw344^*)=+6N9 zGl2dKpg#lX&j9)}fc^}iKLhB`0Qxh4{tTc$1L)5H`ZIw344^;%f1y7uud(KbFT_^1 z9{rN0t4f$arR(Z4_GWa~)zydo^co+c0ST?BkDyjQ`uE>ht`q>!GCdJpq3fzr5EY#r zSEKF92K1?I{qVVDfi5f85$K}&UxNO$qHt!f)RPoIfBuKipYlho+3VCBkcMWXQ0&jN z9963FFNOY$7!maxMUFYj(#D1p2gP__)iz_aia#M~p-(R~C{#hy(H80b2_=6|(;ZuC zXkUt^;qQh809mHFu;pl)p=-KBa}7h&yq>J+arnDw@?6s}T(l+fIIjyanuh&3lJ;WY zv+N2#%Wwqk1$xzL{o^129oW9UJsW`bwSm^^{kbe> z!v#<;6epSnF}se+PdLQS)FD8H=IWkW`1uLfrFF4C+vT|?j)b2Xj|enMw{wvPY&b4`F%vkWvH3P|I?&*t+rUBj?RH-x5} zECY}<4^cPzIdp89*A=?qn50(%t*jmz}Iu$y+%OSd1jy5Vo)k(hcF5l4YO)FWjXyu!LcgT!d>W z&tYi-o`d#hn1&Y@M9UQXEVdaB+ni-;8Gzv?8NkR5wpH-M9qwPlGNqxB3@iwhW#DNz zyesVw9*}gyvLrCT{o^cYIeeCI2c|=Fbr+i^8CbS$vLCV>36}mfG!r_m=nG7NXcij0 zdCyXV8If&)pKFk;bl23_zewGIm-X*O8n$cDv*A{Vbe;Rp7q&pp0Y!tuCw{__I<29> z>7ePI&cn35_V?&DB!*eMhQ#)0t`>1R{<*pGo@8a~uydNL!E?G~m*9ur2Ke`48@Q>NW}2E}AHr1pIQXGUpZKBeAKwJ90MCY?!M}!sQ)55m;MCZUYw!o` z*K{5Jl=y+B#3i69veFIwu0y#SB|JXu&#*PG`#oBIj){+Plbm%!Vl)16x`lX%J^K%h45E06&L)v1=l# zrZabOottEXx+8Gv{=Fbz(4`^+$6$YeaY9$;!s{sf8OVSC2K-Hq@WUYqs;RpXe!bP;gy8eU$;Yq(Hx(p@CZkuPgS`*F}D$MVSc@gr9M zUO+=yM>JiRHmxg=*0Noq27ru^=fdJhcTpEmauU##`Wk3T9Zq<0JNXTPEY#$6;m6r7 z;hvF2(EgCEvRw+{CC@ZYz^GX+-Ui9nLGY4&2`U9jy$OO+;up{?&W{k@qoPB5L5RtE zFQj2AH3cM?d@rEpVX!YjR$+471e#>KM9l+ANqe!8Ly(>d2R99mL-@iz8wZ4+JQF_z z#_UUk3u|D0D3P&U3gj~!>!GfKE8V{aeqF8P@t_Iz*`PU`H=-s3H%9z)Avlk+bYZhy zq9$W-J_DM~cIjn<9Mhn7qtuW=Q{q3+;7w?M*fHmqP&Hh^$~atHOp`DWqT!QntoKNS zP#{vqxg6iaxj-;9&a&Xi6&lhKrb!4!p`rRkGzpF2amc6HXQMdey$SHeyB2aB_9Ygo zX5I^qXnzWtV7mkjTFK*(w3F^4gSFU?dzmiB-l$)}(1{-+73F!o)QZO;R94nN+{AYy z5@Hk&{cA`Kj)Tq|G$^k!PRR{WBSS@p#_9O(2lLZyM3g)ZaU!pQ7>VOGiPVZ?N9@?( zng?h&5?aGRVT$w$T4nH^0-8|PKqZpnQ`F&86l>UZ-FLRrVgr799!Tu zoe~d$hEfCV1tnkh5eQEa^wT&*f680|XUF^?0(@qmVEAFYdeC+D0l>YZG_LRAHCKY1>CL`YVUipD-0G*pskE>f`Q zyeBQ(KWTVkI0isoaY;`kM*41Id!(eKg(Br_uazwV^aYVe`r%U3`iIjZJvyjwAv%v~ K)~sW Date: Sun, 8 Dec 2019 16:30:26 -0700 Subject: [PATCH 087/123] Add new section on correctness, mutation testing --- 00-Table_of_Contents.md | 7 ++-- 02-Use_the_Tools_Available.md | 9 ++++++ 08-Considering_Performance.md | 2 ++ 09-Considering_Correctness.md | 30 ++++++++++++++++++ ...ble_Scripting.md => 10-Enable_Scripting.md | 0 ...urther_Reading.md => 11-Further_Reading.md | 0 11-Final_Thoughts.md => 12-Final_Thoughts.md | 0 SUMMARY.md | 7 ++-- ... (std sort).pdf => Sorting in C vs C++.pdf | Bin 9 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 09-Considering_Correctness.md rename 09-Enable_Scripting.md => 10-Enable_Scripting.md (100%) rename 10-Further_Reading.md => 11-Further_Reading.md (100%) rename 11-Final_Thoughts.md => 12-Final_Thoughts.md (100%) rename Sorting in C (qsort) vs C++ (std sort).pdf => Sorting in C vs C++.pdf (100%) diff --git a/00-Table_of_Contents.md b/00-Table_of_Contents.md index 2246a46..67008eb 100644 --- a/00-Table_of_Contents.md +++ b/00-Table_of_Contents.md @@ -7,8 +7,9 @@ 6. [Considering Portability](06-Considering_Portability.md) 7. [Considering Threadability](07-Considering_Threadability.md) 8. [Considering Performance](08-Considering_Performance.md) - 9. [Enable Scripting](09-Enable_Scripting.md) - 10. [Further Reading](10-Further_Reading.md) - 11. [Final Thoughts](11-Final_Thoughts.md) + 9. [Considering Correctness](09-Considering_Correctness.md) + 10. [Enable Scripting](10-Enable_Scripting.md) + 11. [Further Reading](11-Further_Reading.md) + 12. [Final Thoughts](12-Final_Thoughts.md) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c635a3b..5cd1b05 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -303,6 +303,15 @@ Both of these tools use coverage reporting to find new code execution paths and * [LibFuzzer](http://llvm.org/docs/LibFuzzer.html) * [KLEE](http://klee.github.io/) - Can be used to fuzz individual functions +### Mutation Testers + +These tools take code executed during unit test runs and mutate the executed code. If the test continues to pass with a mutation in place, then there is likely a flawed test in your suite. + + * [Dextool Mutate](https://github.com/joakim-brannstrom/dextool/tree/master/plugin/mutate) + * [MuCPP](https://neptuno.uca.es/redmine/projects/mucpp-mutation-tool/wiki) + * [mull](https://github.com/mull-project/mull) + * [CCMutator](https://github.com/markus-kusano/CCMutator) + ### Control Flow Guard MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) adds high performance runtime security checks. diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 89404c5..784ca33 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -33,6 +33,8 @@ template class MyTemplatedType; This is a proactive approach to reduce compilation time and rebuilding dependencies. +*Note: forward declaration does prevent more inlining and optimizations. It's recommended to use Link Time Optimization or Link Time Code Generation for release builds.* + ### Avoid Unnecessary Template Instantiations Templates are not free to instantiate. Instantiating many templates, or templates with more code than necessary increases compiled code size and build time. diff --git a/09-Considering_Correctness.md b/09-Considering_Correctness.md new file mode 100644 index 0000000..a9b9c8b --- /dev/null +++ b/09-Considering_Correctness.md @@ -0,0 +1,30 @@ +# Considering Correctness + +## Avoid Typeless Interfaces + + +Bad Idea: + +```cpp +std::string find_file(const std::string &base, const std::string &pattern); +``` + +Better Idea: + +```cpp +std::filesystem::path find_file(const std::filesystem::path &base, const std::regex &pattern); +``` + +The above is better but still suffers from having implicit conversions from `std::string` to `std::filesystem::path` and back. + +Consider using a typesafe library like + + * https://foonathan.net/type_safe/ + * https://github.com/rollbear/strong_type + +Note that stronger typing can also allow for more compiler optimizations. + + +* [Sorting in C vs C++](Sorting in C vs C++.pdf) + + diff --git a/09-Enable_Scripting.md b/10-Enable_Scripting.md similarity index 100% rename from 09-Enable_Scripting.md rename to 10-Enable_Scripting.md diff --git a/10-Further_Reading.md b/11-Further_Reading.md similarity index 100% rename from 10-Further_Reading.md rename to 11-Further_Reading.md diff --git a/11-Final_Thoughts.md b/12-Final_Thoughts.md similarity index 100% rename from 11-Final_Thoughts.md rename to 12-Final_Thoughts.md diff --git a/SUMMARY.md b/SUMMARY.md index a0d963c..8fbe59d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -8,7 +8,8 @@ * [Considering Portability](06-Considering_Portability.md) * [Considering Threadability](07-Considering_Threadability.md) * [Considering Performance](08-Considering_Performance.md) -* [Enable Scripting](09-Enable_Scripting.md) -* [Further Reading](10-Further_Reading.md) -* [Final Thoughts](11-Final_Thoughts.md) +* [Considering Correctness](09-Considering_Performance.md) +* [Enable Scripting](10-Enable_Scripting.md) +* [Further Reading](11-Further_Reading.md) +* [Final Thoughts](12-Final_Thoughts.md) diff --git a/Sorting in C (qsort) vs C++ (std sort).pdf b/Sorting in C vs C++.pdf similarity index 100% rename from Sorting in C (qsort) vs C++ (std sort).pdf rename to Sorting in C vs C++.pdf From 018cb79fe4690d35b92b8d6c2cfc178f4321e32a Mon Sep 17 00:00:00 2001 From: Stuart Dootson Date: Mon, 9 Dec 2019 14:46:19 +0000 Subject: [PATCH 088/123] Add vcpkg to 'Use the Tools Available' Add Microsoft's `vcpkg` package manager. --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 5cd1b05..de002d6 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -47,6 +47,7 @@ Package management is an important topic in C++, with currently no clear winner. * [qpm](https://www.qpm.io/) - Package manager for Qt * [build2](https://build2.org/) - cargo-like package management for C++ * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more + * [vcpkg](https://docs.microsoft.com/en-us/cpp/build/vcpkg) - A C++ package manager for Windows, Linux and MacOS ## Continuous Integration From 73500d48eaefb9bf370225e26e6becc6a18df10a Mon Sep 17 00:00:00 2001 From: "tlepoix@localhost" Date: Wed, 25 Dec 2019 03:06:54 +0100 Subject: [PATCH 089/123] 02-Use_the_Tools_Aviable : Add autotools, gdb, heaptrack, hotspot, cutter --- 02-Use_the_Tools_Available.md | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..ca8d79e 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -16,6 +16,7 @@ Source control is an absolute necessity for any software development project. If Use an industry standard widely accepted build tool. This prevents you from reinventing the wheel whenever you discover / link to a new library / package your product / etc. Examples include: + * [Autotools](https://autotools.io) - The traditional GNU build system. * [CMake](http://www.cmake.org/) * Consider: https://github.com/sakra/cotire/ for build performance * Consider: https://github.com/toeb/cmakepp for enhanced usability @@ -25,9 +26,9 @@ Use an industry standard widely accepted build tool. This prevents you from rein * `cmake --build` provides a common interface for compiling your project regardless of platform * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) - * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. - * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution - * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid + * [Ninja](https://ninja-build.org/) - Can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. + * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution. + * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid. * [gyp](https://chromium.googlesource.com/external/gyp/) - Google's build tool for chromium. * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. @@ -275,13 +276,23 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) - open source coverage reporting tool for Windows. -### Valgrind +### Heap profiling -[Valgrind](http://www.valgrind.org/) is a runtime code analyzer that can detect memory leaks, race conditions, and other associated problems. It is supported on various Unix platforms. + * [Valgrind](http://www.valgrind.org/) + * Valgrind is a runtime code analyzer that can detect memory leaks, race conditions, and other associated problems. It is supported on various Unix platforms. + * [Heaptrack](https://github.com/KDE/heaptrack) + * A profiler created by a Valgrind's Massif developper. Quite similar to Massif with pros and cons over it, way more intuitive though. + * [Dr Memory](http://www.drmemory.org) + * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler. -### Dr Memory +### CPU profiling -Similar to Valgrind. http://www.drmemory.org + * [Hotspot](https://github.com/KDAB/hotspot) - An intuitive front-end to visualize datas produced by the [perf](https://perf.wiki.kernel.org) CPU profiler. + * [uftrace](https://github.com/namhyung/uftrace) - Can be used to generating function call graphs of a program execution. + +### Reverse engineering tools + + * [Cutter](https://cutter.re/) - A front-end for [Radare2](https://www.radare.org/n/radare2.html). It provides tools such as decompiler, disassembly, graph visualizer, hex editor. ### GCC / Clang Sanitizers @@ -321,10 +332,6 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des * `_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html). -### Heap Profiling - - * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler - ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. @@ -351,9 +358,9 @@ Don't forget to make sure that your error handling is being tested and works pro ## Debugging -### uftrace +### GDB -[uftrace](https://github.com/namhyung/uftrace) can be used to generating function call graphs of a program execution +[GDB](https://www.gnu.org/software/gdb/) - The GNU debugger, powerful and widely used. Most IDEs implement an interface to use it. ### rr From 1b0d330534e35fcde108b1fe17f470c412eab152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=BClsmann?= Date: Sun, 26 Jan 2020 21:00:21 +0100 Subject: [PATCH 090/123] fix: fix link to Memoro Fix swapped Markdown Link. --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..639b499 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -323,7 +323,7 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des ### Heap Profiling - * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler + * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler ## Ignoring Warnings From 07eb64cfeb85c1259668a2c1c9cf8e406e8d6842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefano=20Fam=C3=A0?= <8192713+famastefano@users.noreply.github.com> Date: Sat, 7 Mar 2020 12:02:18 +0100 Subject: [PATCH 091/123] /Wx raises Command-Line Error D8021 The correct arg has a capital X `/WX`. `/Wx` is treated like `/W` but fails the parsing and generates an invalid number (I suppose). --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..385f1db 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -164,7 +164,7 @@ Not recommended Start with very strict warning settings from the beginning. Trying to raise the warning level after the project is underway can be painful. -Consider using the *treat warnings as errors* setting. `/Wx` with MSVC, `-Werror` with GCC / Clang +Consider using the *treat warnings as errors* setting. `/WX` with MSVC, `-Werror` with GCC / Clang ## LLVM-based tools From bb0d93a36d4a2609ea6e954e56998a3e24920c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Catarino=20Fran=C3=A7a?= Date: Tue, 17 Mar 2020 14:06:10 -0300 Subject: [PATCH 092/123] XMake - Build System --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..b18bc27 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -33,6 +33,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. * [premake](https://premake.github.io/) + * [xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation 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. From fe0fcf90404af1c2c55c119037f51999e75e6d9f Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 12 Apr 2020 21:38:48 -0600 Subject: [PATCH 093/123] Fix summary.md link to chapter 9 --- SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 8fbe59d..6ecc4de 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -8,7 +8,7 @@ * [Considering Portability](06-Considering_Portability.md) * [Considering Threadability](07-Considering_Threadability.md) * [Considering Performance](08-Considering_Performance.md) -* [Considering Correctness](09-Considering_Performance.md) +* [Considering Correctness](09-Considering_Correctness.md) * [Enable Scripting](10-Enable_Scripting.md) * [Further Reading](11-Further_Reading.md) * [Final Thoughts](12-Final_Thoughts.md) From 571d59382e1fcda6ac238da0da23cc808eddbec9 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Fri, 24 Apr 2020 17:30:03 -0700 Subject: [PATCH 094/123] Add pahole to the Other Tools list --- 02-Use_the_Tools_Available.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..c00a6bc 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -381,10 +381,14 @@ Don't forget to make sure that your error handling is being tested and works pro [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. -### SourceMeter +### SourceMeter [SourceMeter](https://www.sourcemeter.com/) offers a free version which provides many different metrics for your code and can also call into cppcheck. ### Bloaty McBloatface [Bloaty McBloatface](https://github.com/google/bloaty) is a binary size analyzer/profiler for unix-like platforms + +### pahole + +[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. From 6e6e5060316a25517847c5a4105085993905d73a Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Fri, 24 Apr 2020 17:30:28 -0700 Subject: [PATCH 095/123] Remove trailing whitespace --- 02-Use_the_Tools_Available.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index c00a6bc..5eb4653 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -32,7 +32,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. - * [premake](https://premake.github.io/) + * [premake](https://premake.github.io/) 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. @@ -66,7 +66,7 @@ Continuous Integration (CI) tools automatically build the source code as changes * Java Application Server is required * supports Windows, OS X, and Linux * extendable with a lot of plugins - * [TeamCity](https://www.jetbrains.com/teamcity) + * [TeamCity](https://www.jetbrains.com/teamcity) * has a free option for open source projects * [Decent CI](https://github.com/lefticus/decent_ci) * simple ad-hoc continuous integration that posts results to GitHub @@ -88,7 +88,7 @@ If you have an open source, publicly-hosted project on GitHub: * 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 * enable one of the coverage tools listed below (Codecov or Coveralls) * enable [Coverity Scan](https://scan.coverity.com) - + 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. @@ -121,7 +121,7 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double` * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) * `-Wlifetime` (only special branch of Clang currently) shows object lifetime issues - + Consider using `-Weverything` and disabling the few warnings you need to on Clang @@ -187,7 +187,7 @@ CMake now also comes with built-in support for calling `clang-tidy` during [norm 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. -### Coverity Scan +### Coverity Scan [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/). @@ -201,16 +201,16 @@ The best bet is the static analyzer that you can run as part of your automated b Notes: * For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`. - * Finding unused headers does not work with `-j` more than 1. + * Finding unused headers does not work with `-j` more than 1. * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. - + ### cppclean [cppclean](https://github.com/myint/cppclean) - Open source static analyzer focused on finding problems in C++ source that slow development of large code bases. - + ### CppDepend - + [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. ### Clang's Static Analyzer @@ -237,7 +237,7 @@ Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.c 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. -### Cevelop +### Cevelop 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. @@ -267,7 +267,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * integrates with Travis CI and AppVeyor * free for open source projects * [LCOV](http://ltp.sourceforge.net/coverage/lcov.php) - * very configurable + * very configurable * [Gcovr](http://gcovr.com/) * [kcov](http://simonkagstrom.github.io/kcov/index.html) * integrates with codecov and coveralls @@ -296,7 +296,7 @@ Be aware of the sanitizer options available, including runtime options. https:// ### Fuzzy Analyzers -If your project accepts user defined input, considering running a fuzzy input tester. +If your project accepts user defined input, considering running a fuzzy input tester. 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. @@ -323,7 +323,7 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des ### Heap Profiling - * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler + * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler ## Ignoring Warnings @@ -373,7 +373,7 @@ Don't forget to make sure that your error handling is being tested and works pro [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 developer spot unintentional breaking changes to ensure backward compatibility. -### CNCC +### CNCC [Customizable Naming Convention Checker](https://github.com/mapbox/cncc) can report on identifiers in your code that do not follow certain naming conventions. From 4aa7ef3c0ac7855ca709313f7aaf0be57ca675c0 Mon Sep 17 00:00:00 2001 From: Shreyas Balakrishna Date: Wed, 29 Apr 2020 16:35:17 +1200 Subject: [PATCH 096/123] Add Jonathan Boccara's NamedType library --- 09-Considering_Correctness.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/09-Considering_Correctness.md b/09-Considering_Correctness.md index a9b9c8b..5bc8b61 100644 --- a/09-Considering_Correctness.md +++ b/09-Considering_Correctness.md @@ -21,10 +21,10 @@ Consider using a typesafe library like * https://foonathan.net/type_safe/ * https://github.com/rollbear/strong_type + * https://github.com/joboccara/NamedType Note that stronger typing can also allow for more compiler optimizations. - * [Sorting in C vs C++](Sorting in C vs C++.pdf) From 77810f654db8a63efbde1bdf4487521a1e94c8b8 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Wed, 17 Jun 2020 18:07:27 -0600 Subject: [PATCH 097/123] Add BinSkim and fuzzit to list of tools --- 02-Use_the_Tools_Available.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4a92fa2..bafe64c 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -315,6 +315,12 @@ Both of these tools use coverage reporting to find new code execution paths and * [LibFuzzer](http://llvm.org/docs/LibFuzzer.html) * [KLEE](http://klee.github.io/) - Can be used to fuzz individual functions +#### Continuous Fuzzing + +Continuous fuzzing tools exist to run fuzz tests for you with each commit. + + * [Fuzzit](https://fuzzit.dev/) + ### Mutation Testers These tools take code executed during unit test runs and mutate the executed code. If the test continues to pass with a mutation in place, then there is likely a flawed test in your suite. @@ -403,3 +409,7 @@ Don't forget to make sure that your error handling is being tested and works pro ### pahole [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. + +### BinSkim + +[BinSkim](https://github.com/Microsoft/binskim) is a binary static analysis tool that provides security and correctness results for Windows Portable Executable and *nix ELF binary formats From dd15e988b63395a6555a7ce0d6fbf9ce8473ae66 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 31 Jul 2020 17:46:50 -0600 Subject: [PATCH 098/123] Create FUNDING.yml --- .github/FUNDING.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..c7270da --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: lefticus +patreon: lefticus From 6829947e0df3170ba53619f42f8d78ab2e431c2a Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Thu, 20 Aug 2020 08:35:23 +1000 Subject: [PATCH 099/123] Fix broken link to Further Reading chapter --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index bafe64c..15c4df7 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -22,7 +22,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * Consider: https://github.com/toeb/cmakepp for enhanced usability * Utilize: https://cmake.org/cmake/help/v3.6/command/target_compile_features.html for C++ standard flags * Consider: https://github.com/cheshirekow/cmake_format for automatic formatting of your CMakeLists.txt - * See the [Further Reading](10-Further_Reading.md) section for CMake specific best practices + * See the [Further Reading](11-Further_Reading.md) section for CMake specific best practices * `cmake --build` provides a common interface for compiling your project regardless of platform * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) From 1be918f768f19699868608a5b792efd2ee21f82d Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 16 Oct 2020 11:32:51 -0600 Subject: [PATCH 100/123] Update README.md --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d3cf3c0..5913527 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,11 @@ Collaborative Collection of C++ Best Practices -This document is available as a download via [gitbook](https://www.gitbook.com/book/lefticus/cpp-best-practices) - For more information please see the [Preface](01-Preface.md). -This book has inspired an O'Reilly video: [Learning C++ Best Practices](http://shop.oreilly.com/product/0636920049814.do) +This online resource is part of Jason Turner's collection of C++ Best Practices resources. + +* [C++ Best Practices Book](https://leanpub.com/cppbestpractices) +* [C++ Weekly YouTube Channel](https://www.youtube.com/c/JasonTurner-lefticus) +* [The Ultimate CMake/C++ Starter Project](https://github.com/lefticus/cpp_starter_project/) +* [Learning C++ Best Practices - O'Reilly Video](http://shop.oreilly.com/product/0636920049814.do) From f58462f1989de94186dbfca4538d671502a72e81 Mon Sep 17 00:00:00 2001 From: Joseph T Lyons Date: Sat, 16 Jan 2021 18:10:50 -0500 Subject: [PATCH 101/123] Remove trailing whitespace --- 00-Table_of_Contents.md | 2 -- 02-Use_the_Tools_Available.md | 8 ++++---- 03-Style.md | 7 +++---- 04-Considering_Safety.md | 12 ++++++------ 05-Considering_Maintainability.md | 2 +- 08-Considering_Performance.md | 9 ++++----- 09-Considering_Correctness.md | 2 -- 11-Further_Reading.md | 2 +- 12-Final_Thoughts.md | 1 - LICENSE | 2 +- SUMMARY.md | 1 - 11 files changed, 20 insertions(+), 28 deletions(-) diff --git a/00-Table_of_Contents.md b/00-Table_of_Contents.md index 67008eb..7f2b1a3 100644 --- a/00-Table_of_Contents.md +++ b/00-Table_of_Contents.md @@ -11,5 +11,3 @@ 10. [Enable Scripting](10-Enable_Scripting.md) 11. [Further Reading](11-Further_Reading.md) 12. [Final Thoughts](12-Final_Thoughts.md) - - diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 15c4df7..5ac0daa 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -33,7 +33,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. - * [premake](https://premake.github.io/) + * [premake](https://premake.github.io/) * [xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation 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. @@ -340,7 +340,7 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des ### Heap Profiling - * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler + * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler ## Ignoring Warnings @@ -410,6 +410,6 @@ Don't forget to make sure that your error handling is being tested and works pro [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. -### BinSkim +### BinSkim -[BinSkim](https://github.com/Microsoft/binskim) is a binary static analysis tool that provides security and correctness results for Windows Portable Executable and *nix ELF binary formats +[BinSkim](https://github.com/Microsoft/binskim) is a binary static analysis tool that provides security and correctness results for Windows Portable Executable and *nix ELF binary formats diff --git a/03-Style.md b/03-Style.md index 241f5c7..db2c7f6 100644 --- a/03-Style.md +++ b/03-Style.md @@ -240,7 +240,7 @@ It also makes it possible to have two separate files next to each other on one s ``` ## Initialize Member Variables -...with the member initializer list. +...with the member initializer list. For POD types, the performance of an initializer list is the same as manual initialization, but for other types there is a clear performance gain, see below. @@ -288,8 +288,8 @@ private: }; // Good Idea -// The default constructor for m_myOtherClass is never called here, so -// there is a performance gain if MyOtherClass is not is_trivially_default_constructible. +// The default constructor for m_myOtherClass is never called here, so +// there is a performance gain if MyOtherClass is not is_trivially_default_constructible. class MyClass { public: @@ -454,4 +454,3 @@ The Rule of Zero states that you do not provide any of the functions that the co The goal is to let the compiler provide optimal versions that are automatically maintained when more member variables are added. [This article](http://www.nirfriedman.com/2015/06/27/cpp-rule-of-zero/) provides a background and explains techniques for implementing nearly 100% of the time. - diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index 7136767..28bf5e7 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -34,9 +34,9 @@ public: * Always return by value. -references: https://github.com/lefticus/cppbestpractices/issues/21 https://twitter.com/lefticus/status/635943577328095232 +references: https://github.com/lefticus/cppbestpractices/issues/21 https://twitter.com/lefticus/status/635943577328095232 -### Do not pass and return simple types by const ref +### Do not pass and return simple types by const ref ```cpp // Very Bad Idea @@ -47,7 +47,7 @@ public: : m_int_value(t_int_value) { } - + const int& get_int_value() const { return m_int_value; @@ -69,7 +69,7 @@ public: : m_int_value(t_int_value) { } - + int get_int_value() const { return m_int_value; @@ -101,7 +101,7 @@ auto mybuffer = std::make_unique(length); // C++14 auto mybuffer = std::unique_ptr(new char[length]); // C++11 // or for reference counted objects -auto myobj = std::make_shared(); +auto myobj = std::make_shared(); // ... // myobj is automatically freed for you whenever it is no longer used. @@ -111,7 +111,7 @@ auto myobj = std::make_shared(); Both of these guarantee contiguous memory layout of objects and can (and should) completely replace your usage of C-style arrays for many of the reasons listed for not using bare pointers. -Also, [avoid](http://stackoverflow.com/questions/3266443/can-you-use-a-shared-ptr-for-raii-of-c-style-arrays) using `std::shared_ptr` to hold an array. +Also, [avoid](http://stackoverflow.com/questions/3266443/can-you-use-a-shared-ptr-for-raii-of-c-style-arrays) using `std::shared_ptr` to hold an array. ## Use Exceptions diff --git a/05-Considering_Maintainability.md b/05-Considering_Maintainability.md index 4547559..2c9a250 100644 --- a/05-Considering_Maintainability.md +++ b/05-Considering_Maintainability.md @@ -33,7 +33,7 @@ Know and understand the existing C++ standard algorithms and put them to use. * See [cppreference](https://en.cppreference.com/w/cpp/algorithm) * Watch [C++ Seasoning](https://www.youtube.com/watch?v=qH6sSOr-yk8) - + Consider a call to `[]` as a potential code smell, indicating that an algorithm was not used where it could have been. diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 784ca33..cd06242 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -43,7 +43,7 @@ For more examples see [this article](http://blog2.emptycrate.com/content/templat ### Avoid Recursive Template Instantiations -Recursive template instantiations can result in a significant load on the compiler and more difficult to understand code. +Recursive template instantiations can result in a significant load on the compiler and more difficult to understand code. [Consider using variadic expansions and folds when possible instead.](http://articles.emptycrate.com/2016/05/14/folds_in_cpp11_ish.html) @@ -289,11 +289,11 @@ if (MyObject obj(index); obj.good()) { ### Prefer `double` to `float`, But Test First -Depending on the situation and the compiler's ability to optimize, one may be faster over the other. Choosing `float` will result in lower precision and may be slower due to conversions. On vectorizable operations `float` may be faster if you are able to sacrifice precision. +Depending on the situation and the compiler's ability to optimize, one may be faster over the other. Choosing `float` will result in lower precision and may be slower due to conversions. On vectorizable operations `float` may be faster if you are able to sacrifice precision. `double` is the recommended default choice as it is the default type for floating point values in C++. -See this [stackoverflow](http://stackoverflow.com/questions/4584637/double-or-float-which-is-faster) discussion for some more information. +See this [stackoverflow](http://stackoverflow.com/questions/4584637/double-or-float-which-is-faster) discussion for some more information. ### Prefer `++i` to `i++` ... when it is semantically correct. Pre-increment is [faster](http://blog2.emptycrate.com/content/why-i-faster-i-c) than post-increment because it does not require a copy of the object to be made. @@ -313,7 +313,7 @@ for (int i = 0; i < 15; ++i) ``` Even if many modern compilers will optimize these two loops to the same assembly code, it is still good practice to prefer `++i`. There is absolutely no reason not to and you can never be certain that your code will not pass a compiler that does not optimize this. -You should be also aware that the compiler will not be able optimize this only for integer types and not necessarily for all iterator or other user defined types. +You should be also aware that the compiler will not be able optimize this only for integer types and not necessarily for all iterator or other user defined types. The bottom line is that it is always easier and recommended to use the pre-increment operator if it is semantically identical to the post-increment operator. ### Char is a char, string is a string @@ -353,4 +353,3 @@ Properly use the already highly optimized components of the vendor provided stan #### `in_place_t` And Related Be aware of how to use `in_place_t` and related tags for efficient creation of objects such as `std::tuple`, `std::any` and `std::variant`. - diff --git a/09-Considering_Correctness.md b/09-Considering_Correctness.md index 5bc8b61..8313374 100644 --- a/09-Considering_Correctness.md +++ b/09-Considering_Correctness.md @@ -26,5 +26,3 @@ Consider using a typesafe library like Note that stronger typing can also allow for more compiler optimizations. * [Sorting in C vs C++](Sorting in C vs C++.pdf) - - diff --git a/11-Further_Reading.md b/11-Further_Reading.md index 515e16f..cc7b721 100644 --- a/11-Further_Reading.md +++ b/11-Further_Reading.md @@ -4,7 +4,7 @@ ## C++ - * https://github.com/isocpp/CppCoreGuidelines The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++ + * https://github.com/isocpp/CppCoreGuidelines The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++ * https://www.gitbook.com/book/alexastva/the-ultimate-question-of-programming-refactoring-/details - The Ultimate Question of Programming, Refactoring, and Everything * http://llvm.org/docs/CodingStandards.html - LLVM Coding Standards - very well written * http://geosoft.no/development/cppstyle.html diff --git a/12-Final_Thoughts.md b/12-Final_Thoughts.md index e7f711b..bb4b8f6 100644 --- a/12-Final_Thoughts.md +++ b/12-Final_Thoughts.md @@ -1,4 +1,3 @@ # Final Thoughts Expand your horizons and use other programming languages. Other languages have different constructs and expressions. Learning what else is out there will encourage you to be more creative with your C++ and write cleaner, more expressive code. - diff --git a/LICENSE b/LICENSE index 0bde2a8..85c55a6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,2 +1,2 @@ -This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. +This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/. diff --git a/SUMMARY.md b/SUMMARY.md index 6ecc4de..c4a9540 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -12,4 +12,3 @@ * [Enable Scripting](10-Enable_Scripting.md) * [Further Reading](11-Further_Reading.md) * [Final Thoughts](12-Final_Thoughts.md) - From 31598aaed10d56f56676a52b31d6898c002908a9 Mon Sep 17 00:00:00 2001 From: AristoChen Date: Tue, 30 Mar 2021 23:52:31 +0800 Subject: [PATCH 102/123] Remove duplicated content --- 02-Use_the_Tools_Available.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 15c4df7..5d40586 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -338,10 +338,6 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des * `_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html). -### Heap Profiling - - * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler - ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. From b99c3da548cd7dfdd97d61c9d9c9c216aaeef7d3 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Tue, 30 Mar 2021 19:48:26 -0500 Subject: [PATCH 103/123] Update the list of profilers --- 08-Considering_Performance.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/08-Considering_Performance.md b/08-Considering_Performance.md index 784ca33..9318611 100644 --- a/08-Considering_Performance.md +++ b/08-Considering_Performance.md @@ -103,8 +103,13 @@ If on Linux, consider using the gold linker for GCC. There's no real way to know where your bottlenecks are without analyzing the code. - * http://developer.amd.com/tools-and-sdks/opencl-zone/codexl/ - * http://www.codersnotes.com/sleepy +A list of code profilers: + * [Intel VTune](https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html) + * [Coz - Causal Profiling](https://github.com/plasma-umass/coz) + * [Sleepy](http://www.codersnotes.com/sleepy) + * [Dyninst](https://dyninst.org/) + * [AMD CodeXL](https://github.com/GPUOpen-Archive/CodeXL) + * [lukestackwalker](http://lukestackwalker.sourceforge.net/) ### Simplify the Code From d7fd0817f570796692838f902228702353e4c69c Mon Sep 17 00:00:00 2001 From: Jonny Paton Date: Thu, 15 Apr 2021 10:42:32 +0100 Subject: [PATCH 104/123] Clarify GCC/Clang compiler flags Added a description for `-pedantic` and clarified similarly to the MSVC section --- 02-Use_the_Tools_Available.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 15c4df7..e991558 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -101,8 +101,9 @@ You should use as many compilers as you can for your platform(s). Each compiler ### GCC / Clang -`-Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic` +`-Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic` - use these and consider the following (see descriptions below) + * `-pedantic` - Warn on language extensions * `-Wall -Wextra` reasonable and standard * `-Wshadow` warn the user if a variable declaration shadows one from a parent context * `-Wnon-virtual-dtor` warn the user if a class with virtual functions has a non-virtual destructor. This helps catch hard to track down memory errors From e6359bcb5cf90607e994bc88d692da1b2b0c189b Mon Sep 17 00:00:00 2001 From: Alexander Cai Date: Thu, 5 Aug 2021 01:14:02 -0600 Subject: [PATCH 105/123] Update 04-Considering_Safety.md fix link to heartbleed article --- 04-Considering_Safety.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index 7136767..f799874 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -142,4 +142,4 @@ If you have the possibility to use a compiler that supports C++11, you can use v ## Additional Resources -[How to Prevent The Next Heartbleed](http://www.dwheeler.com/essays/heartbleed.html) by David Wheeler is a good analysis of the current state of code safety and how to ensure safe code. +[How to Prevent The Next Heartbleed](https://dwheeler.com/essays/heartbleed.html) by David Wheeler is a good analysis of the current state of code safety and how to ensure safe code. From 55b67e437d00278bf483d1120f4fdc1389ad84dc Mon Sep 17 00:00:00 2001 From: Soham Roy <72430659+sohamroy19@users.noreply.github.com> Date: Mon, 9 Aug 2021 10:16:11 +0530 Subject: [PATCH 106/123] Fixed broken youtube link in README.md Mentioned in #130 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5913527..ce16a60 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,6 @@ For more information please see the [Preface](01-Preface.md). This online resource is part of Jason Turner's collection of C++ Best Practices resources. * [C++ Best Practices Book](https://leanpub.com/cppbestpractices) -* [C++ Weekly YouTube Channel](https://www.youtube.com/c/JasonTurner-lefticus) +* [C++ Weekly YouTube Channel](https://www.youtube.com/user/lefticus1) * [The Ultimate CMake/C++ Starter Project](https://github.com/lefticus/cpp_starter_project/) * [Learning C++ Best Practices - O'Reilly Video](http://shop.oreilly.com/product/0636920049814.do) From f3eb30f1020da78776cc4b372f9de62b367e0db5 Mon Sep 17 00:00:00 2001 From: simrego <37458367+simrego@users.noreply.github.com> Date: Wed, 18 Aug 2021 15:43:01 +0200 Subject: [PATCH 107/123] Update 02-Use_the_Tools_Available.md Maybe include Ghidra in reverse engineering tools? It has a lot of features. And I know this is an NSA program, but they already knows what have you done... ;) --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 15c4df7..2b7919b 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -293,6 +293,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e ### Reverse engineering tools * [Cutter](https://cutter.re/) - A front-end for [Radare2](https://www.radare.org/n/radare2.html). It provides tools such as decompiler, disassembly, graph visualizer, hex editor. + * [Ghidra](https://ghidra-sre.org/) - Ghidra is a free and open source reverse engineering tool developed by the National Security Agency (NSA) of the United States. ### GCC / Clang Sanitizers From 3104a4c183db86a331771a94420b84b039c6e1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klaim=20=28Jo=C3=ABl=20Lamotte=29?= <142265+Klaim@users.noreply.github.com> Date: Thu, 23 Dec 2021 22:58:18 +0100 Subject: [PATCH 108/123] Fixed slightly incorrect build2 references `build2` is a toolchain with both build-system and package manager (and a few other tools to help project management). This adds it to the build system list (it can be used with only the build system) and clarifies that it's a complete toolchain in both references. --- 02-Use_the_Tools_Available.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index b44f707..5ffebb4 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -35,6 +35,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. * [premake](https://premake.github.io/) * [xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation + * [build2](https://build2.org) - A cargo-like complete toolchain (build system, package manager, project manager) 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. @@ -46,7 +47,7 @@ Package management is an important topic in C++, with currently no clear winner. * [hunter](https://github.com/ruslo/hunter) - CMake driven cross-platform package manager for C/C++ * [C++ Archive Network (CPPAN)](https://cppan.org/) - a crossplatform dependency manager for C++ * [qpm](https://www.qpm.io/) - Package manager for Qt - * [build2](https://build2.org/) - cargo-like package management for C++ + * [build2](https://build2.org/) - A cargo-like complete toolchain (build system, package manager, project manager) * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more * [Vcpkg](https://github.com/microsoft/vcpkg) - Microsoft C++ Library Manager for Windows, Linux, and MacOS - [description](https://docs.microsoft.com/en-us/cpp/build/vcpkg) From d506e2651334b94e693548417bfb2ac7133b701c Mon Sep 17 00:00:00 2001 From: Joey Hewitt Date: Wed, 26 Jan 2022 09:49:37 -0800 Subject: [PATCH 109/123] Considering_Safety typo fix --- 04-Considering_Safety.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index f799874..5df8298 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -80,7 +80,7 @@ private: } ``` -Why? Because passing and returning by reference leads to pointer operations instead by much more faster passing values in processor registers. +Why? Because passing and returning by reference leads to pointer operations, instead of much faster passing of values in processor registers. ## Avoid Raw Memory Access From 94af2ae300040b05f35835f74b34b1bb34913076 Mon Sep 17 00:00:00 2001 From: Cliff Burdick <30670611+cliffburdick@users.noreply.github.com> Date: Thu, 10 Feb 2022 14:50:24 -0800 Subject: [PATCH 110/123] Adds CPM to package managers (#140) --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 5ffebb4..25b59a0 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -50,6 +50,7 @@ Package management is an important topic in C++, with currently no clear winner. * [build2](https://build2.org/) - A cargo-like complete toolchain (build system, package manager, project manager) * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more * [Vcpkg](https://github.com/microsoft/vcpkg) - Microsoft C++ Library Manager for Windows, Linux, and MacOS - [description](https://docs.microsoft.com/en-us/cpp/build/vcpkg) + * [CPM](https://github.com/cpm-cmake/CPM.cmake) - CMake package manager for modern CMake ## Continuous Integration From 3abdbfeb94f47f455ccd2f60c1e4a59db78e7206 Mon Sep 17 00:00:00 2001 From: iFarbod Date: Tue, 10 May 2022 17:44:38 +0430 Subject: [PATCH 111/123] Add note about VS2022's treast angle brackets as external feature --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 2b6f441..58e71a0 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -161,6 +161,7 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan Not recommended * `/Wall` - Also warns on files included from the standard library, so it's not very useful and creates too many extra warnings. + * Since VS2022, `/external:anglebrackets /external:W0` can be used to turn off warnings from all headers included with angle brackets, e.g. `#include `. From 8ed0b2ea5165eabdecc480c96e59c01f66c1d236 Mon Sep 17 00:00:00 2001 From: tocic Date: Sun, 4 Sep 2022 14:29:59 +0300 Subject: [PATCH 112/123] Fix typos --- 02-Use_the_Tools_Available.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 2b6f441..d176b25 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -27,12 +27,12 @@ Use an industry standard widely accepted build tool. This prevents you from rein * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) * [Ninja](https://ninja-build.org/) - Can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. - * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution. - * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid. + * [Bazel](http://bazel.io/) - Fast incremental builds using network artifact caching and remote execution. + * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Android. * [gyp](https://chromium.googlesource.com/external/gyp/) - Google's build tool for chromium. * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. - * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible. + * [meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user-friendly as possible. * [premake](https://premake.github.io/) * [xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation * [build2](https://build2.org) - A cargo-like complete toolchain (build system, package manager, project manager) @@ -49,7 +49,7 @@ Package management is an important topic in C++, with currently no clear winner. * [qpm](https://www.qpm.io/) - Package manager for Qt * [build2](https://build2.org/) - A cargo-like complete toolchain (build system, package manager, project manager) * [Buckaroo](https://buckaroo.pm) - Truly decentralized cross-platform dependency manager for C/C++ and more - * [Vcpkg](https://github.com/microsoft/vcpkg) - Microsoft C++ Library Manager for Windows, Linux, and MacOS - [description](https://docs.microsoft.com/en-us/cpp/build/vcpkg) + * [Vcpkg](https://github.com/microsoft/vcpkg) - Microsoft C++ Library Manager for Windows, Linux, and macOS - [description](https://docs.microsoft.com/en-us/cpp/build/vcpkg) * [CPM](https://github.com/cpm-cmake/CPM.cmake) - CMake package manager for modern CMake ## Continuous Integration @@ -88,7 +88,7 @@ Continuous Integration (CI) tools automatically build the source code as changes If you have an open source, publicly-hosted project on GitHub: - * 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 + * 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 * enable one of the coverage tools listed below (Codecov or Coveralls) * enable [Coverity Scan](https://scan.coverity.com) @@ -122,8 +122,8 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wlogical-op` (only in GCC) warn about logical operations being used where bitwise were probably wanted * `-Wnull-dereference` (only in GCC >= 6.0) warn if a null dereference is detected * `-Wuseless-cast` (only in GCC >= 4.8) warn if you perform a cast to the same type - * `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double` - * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) + * `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicitly promoted to `double` + * `-Wformat=2` warn on security issues around functions that format output (i.e., `printf`) * `-Wlifetime` (only special branch of Clang currently) shows object lifetime issues Consider using `-Weverything` and disabling the few warnings you need to on Clang @@ -152,7 +152,7 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan * `/w14549` 'operator': operator before comma has no effect; did you intend 'operator'? * `/w14555` expression has no effect; expected expression with side-effect * `/w14619` pragma warning: there is no warning number 'number' - * `/w14640` Enable warning on thread un-safe static member initialization + * `/w14640` Enable warning on thread unsafe static member initialization * `/w14826` Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. * `/w14905` wide string literal cast to 'LPSTR' * `/w14906` string literal cast to 'LPWSTR' @@ -206,7 +206,7 @@ Notes: * For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`. * Finding unused headers does not work with `-j` more than 1. - * Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them. + * Remember to add `--force` for code with a lot number of `#ifdef` if you need to check all of them. ### cppclean @@ -256,7 +256,7 @@ Qt Creator can plug into the clang static analyzer. ### IKOS [IKOS](https://ti.arc.nasa.gov/opensource/ikos/) is an open source static analyzer, developed by NASA. It is based on the Abstract Interpretation. It is written in C++ and provides an analyzer for C and C++, using LLVM. -The source code is [available on Github](https://github.com/NASA-SW-VnV/ikos). +The source code is [available on GitHub](https://github.com/NASA-SW-VnV/ikos). ## Runtime Checkers @@ -284,7 +284,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * [Valgrind](http://www.valgrind.org/) * Valgrind is a runtime code analyzer that can detect memory leaks, race conditions, and other associated problems. It is supported on various Unix platforms. * [Heaptrack](https://github.com/KDE/heaptrack) - * A profiler created by a Valgrind's Massif developper. Quite similar to Massif with pros and cons over it, way more intuitive though. + * A profiler created by a Valgrind's Massif developer. Quite similar to Massif with pros and cons over it, way more intuitive though. * [Dr Memory](http://www.drmemory.org) * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler. @@ -350,7 +350,7 @@ Be sure to reenable the warning after disabling it for a section of code. You do ## Testing -CMake, mentioned above, has a built in framework for executing tests. Make sure whatever build system you use has a way to execute tests built in. +CMake, mentioned above, has a built-in framework for executing tests. Make sure whatever build system you use has a way to execute tests built in. To further aid in executing tests, consider a library such as [Google Test](https://github.com/google/googletest), [Catch](https://github.com/philsquared/Catch), [CppUTest](https://github.com/cpputest/cpputest) or [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/) to help you organize the tests. From f59a1d7a0e15b2e5080134fbef7572b747d779e9 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 19 Sep 2022 10:14:06 -0600 Subject: [PATCH 113/123] Update 02-Use_the_Tools_Available.md Add note about implicit-fallthrough with clang vs gcc --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 2b6f441..a159c71 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -125,6 +125,7 @@ You should use as many compilers as you can for your platform(s). Each compiler * `-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double` * `-Wformat=2` warn on security issues around functions that format output (ie `printf`) * `-Wlifetime` (only special branch of Clang currently) shows object lifetime issues + * `-Wimplicit-fallthrough` Warns when case statements fall-through. (Included with `-Wextra` in GCC, not in clang) Consider using `-Weverything` and disabling the few warnings you need to on Clang From 3b4eee387cb7a11c38a5fcf9f5ae8b9f0618b168 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 19 Sep 2022 10:19:11 -0600 Subject: [PATCH 114/123] Update 02-Use_the_Tools_Available.md --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 643070d..66d75ee 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -88,7 +88,7 @@ Continuous Integration (CI) tools automatically build the source code as changes If you have an open source, publicly-hosted project on GitHub: - * 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 + * go enable github actions. A template for this can be found in the [C++ Boilerplate Template](https://github.com/cpp-best-practices/cmake_conan_boilerplate_template) * enable one of the coverage tools listed below (Codecov or Coveralls) * enable [Coverity Scan](https://scan.coverity.com) From 05c3e4ff38e163f71c4a187435c0f044164a3649 Mon Sep 17 00:00:00 2001 From: Sergey Avseyev Date: Sat, 1 Oct 2022 20:41:49 +0000 Subject: [PATCH 115/123] Fix link to PDF in "Considering Correctness" --- 09-Considering_Correctness.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/09-Considering_Correctness.md b/09-Considering_Correctness.md index 8313374..f39af90 100644 --- a/09-Considering_Correctness.md +++ b/09-Considering_Correctness.md @@ -25,4 +25,4 @@ Consider using a typesafe library like Note that stronger typing can also allow for more compiler optimizations. -* [Sorting in C vs C++](Sorting in C vs C++.pdf) +* [Sorting in C vs C++](Sorting%20in%20C%20vs%20C++.pdf) From 213413aad7117950e73c598313721c576902af2e Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 25 Oct 2022 12:54:33 -0600 Subject: [PATCH 116/123] Add codespell link --- 02-Use_the_Tools_Available.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 66d75ee..de1b26e 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -260,6 +260,10 @@ Qt Creator can plug into the clang static analyzer. [IKOS](https://ti.arc.nasa.gov/opensource/ikos/) is an open source static analyzer, developed by NASA. It is based on the Abstract Interpretation. It is written in C++ and provides an analyzer for C and C++, using LLVM. The source code is [available on GitHub](https://github.com/NASA-SW-VnV/ikos). +### codespell + +[codespell](https://github.com/codespell-project/codespell) is a spell checker for your source code. + ## Runtime Checkers ### Code Coverage Analysis From 18aa4b6945d2b3e6149db9ae6de63d8c9fa56967 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 25 Oct 2022 13:00:36 -0600 Subject: [PATCH 117/123] Add hdoc --- 02-Use_the_Tools_Available.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index de1b26e..e578cf8 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -382,6 +382,12 @@ Don't forget to make sure that your error handling is being tested and works pro [rr](http://rr-project.org/) is a free (open source) reverse debugger that supports C++. + +## Documentation Tools + + * [hdoc](https://hdoc.io/) the modern documentation tool for C++ + + ## Other Tools ### Lizard From b1629ebf8131d3a4536a0f1da36cc3fe8a91ecb6 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 25 Oct 2022 14:12:50 -0600 Subject: [PATCH 118/123] Add "universal mutator" --- 02-Use_the_Tools_Available.md | 1 + 1 file changed, 1 insertion(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index e578cf8..a785ecc 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -339,6 +339,7 @@ These tools take code executed during unit test runs and mutate the executed cod * [MuCPP](https://neptuno.uca.es/redmine/projects/mucpp-mutation-tool/wiki) * [mull](https://github.com/mull-project/mull) * [CCMutator](https://github.com/markus-kusano/CCMutator) + * [Universal Mutator](https://github.com/agroce/universalmutator) ### Control Flow Guard From 6206bbf7ef057ead2a99147cbdc8731dc9b684c3 Mon Sep 17 00:00:00 2001 From: Andy Maloney Date: Wed, 18 Jan 2023 16:10:47 -0500 Subject: [PATCH 119/123] clang-modernize is now part of clang-tidy --- 02-Use_the_Tools_Available.md | 1 - 1 file changed, 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index a785ecc..8e987a4 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -185,7 +185,6 @@ If you are not using a build system like that, you can consider [Build EAR](http CMake now also comes with built-in support for calling `clang-tidy` during [normal compilation](https://cmake.org/cmake/help/latest/prop_tgt/LANG_CLANG_TIDY.html). * [include-what-you-use](https://github.com/include-what-you-use), [example results](https://github.com/ChaiScript/ChaiScript/commit/c0bf6ee99dac14a19530179874f6c95255fde173) - * [clang-modernize](http://clang.llvm.org/extra/clang-modernize.html), [example results](https://github.com/ChaiScript/ChaiScript/commit/6eab8ddfe154a4ebbe956a5165b390ee700fae1b) * [clang-check](http://clang.llvm.org/docs/ClangCheck.html) * [clang-tidy](http://clang.llvm.org/extra/clang-tidy.html) From 883275cca46512b387b6465408d40709af5add0a Mon Sep 17 00:00:00 2001 From: Pete Brubaker Date: Fri, 26 May 2023 20:24:40 -0700 Subject: [PATCH 120/123] Fix broken link to John Carmack's comments on `const` The original link to Kotaku yields a 301 error, this links to the original 2013 article using the wayback machine. --- 04-Considering_Safety.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-Considering_Safety.md b/04-Considering_Safety.md index 0592ff9..26a87bb 100644 --- a/04-Considering_Safety.md +++ b/04-Considering_Safety.md @@ -2,7 +2,7 @@ ## Const as Much as Possible -`const` tells the compiler that a variable or method is immutable. This helps the compiler optimize the code and helps the developer know if a function has a side effect. Also, using `const &` prevents the compiler from copying data unnecessarily. The [comments on `const` from John Carmack](http://kotaku.com/454293019) are also a good read. +`const` tells the compiler that a variable or method is immutable. This helps the compiler optimize the code and helps the developer know if a function has a side effect. Also, using `const &` prevents the compiler from copying data unnecessarily. The [comments on `const` from John Carmack](https://web.archive.org/web/20131211065348/https://kotaku.com/454293019) are also a good read. ```cpp // Bad Idea From 6b84e8dd7b7a9eeddee70481ad11dd7da5b1616d Mon Sep 17 00:00:00 2001 From: Alec Breton Date: Tue, 25 Jul 2023 15:10:44 -0400 Subject: [PATCH 121/123] Update 03-Style.md --- 03-Style.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Style.md b/03-Style.md index db2c7f6..7f8607d 100644 --- a/03-Style.md +++ b/03-Style.md @@ -35,7 +35,7 @@ Every IDE and many editors have support for clang-format built in or easily inst C++ Standard Library (and other well-known C++ libraries like [Boost](http://www.boost.org/)) use these guidelines: * Macro names use upper case with underscores: `INT_MAX`. - * Template parameter names use camel case: `InputIterator`. + * Template parameter names use Pascal case: `InputIterator`. * All other names use snake case: `unordered_map`. ## Distinguish Private Object Data From 3d381ba20bb445c03d53b4ffc50e12b2c509d9c1 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Thu, 8 Feb 2024 17:20:56 +0000 Subject: [PATCH 122/123] Added Sonar analyzers --- 02-Use_the_Tools_Available.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 8e987a4..4066329 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -192,6 +192,12 @@ CMake now also comes with built-in support for calling `clang-tidy` during [norm 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. +### SonarLint / SonarQube / SonarCloud + +[SonarLint](https://www.sonarsource.com/products/sonarlint/) runs as a plug-in in all the main IDEs. The other two run as part of your build pipeline and can also gate PRs. [SonarQube](https://www.sonarsource.com/products/sonarqube/) runs on your own infrastructure whereas [SonarCloud](https://www.sonarsource.com/products/sonarcloud/) runs in The Cloud, is free for public Open Source projects and supports Automatic Analysis for zero-config setup. + +All three run the same set of analyzers (although SonarQube and SonarCloud have a handful of additional checks that are too heavyweight to run in-IDE) that catch code smells and best practice violations, as well as complex bugs. + ### Coverity Scan [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/). From d57b14ec6d7f13f0af65f9bde62aa3ebd5fb588a Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Tue, 18 Jun 2024 22:21:10 -0600 Subject: [PATCH 123/123] Update 02-Use_the_Tools_Available.md Update working around /Wall --- 02-Use_the_Tools_Available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 4066329..83e8cb8 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -161,7 +161,7 @@ Consider using `-Weverything` and disabling the few warnings you need to on Clan Not recommended - * `/Wall` - Also warns on files included from the standard library, so it's not very useful and creates too many extra warnings. + * `/Wall` - Not recommended for normal builds because the MSVC standard library is not `/Wall` "clean", but can be enabled to discover new warnings to enable. * Since VS2022, `/external:anglebrackets /external:W0` can be used to turn off warnings from all headers included with angle brackets, e.g. `#include `.