Comments (8)
cppcheck is available on all platforms; there isn't an out-of-the-box ready experience for clang-tidy on Windows yet AFAIK.
from cpp.
There are a couple issues here. First, there is the "styling" of code: spaces vs. tabs, placing of space characters, bracing styles, etc. Second, are static analysis tools.
- Styling tools and guides:
- Static analysis tools:
- Clang Static Analyzer
- Visual Studio Static Analysis:
- cppcheck
- Oink
- PC-Lint
- flawfinder
- stack
from cpp.
This is definitely about (consistent) style (spaces, braces, that sort of thing), not static analysis.
Static analysis is a delightful rabbit hole, though, and we're exploring the possibility of integrating some aspects of that into exercism (see exploration/discussion here: exercism/exercism#1607).
from cpp.
OK, in the realm of styling, I know of tools that exist to reformat your C++ according to some style guide, but they don't give you feedback on how well you are doing at matching a particular style or even if your style is consistent throughout.
I think what comes closest to the ruby example shown in pull request #1607 for C++ is cppcheck
with it's performance and style category of warnings. clang-modernize
is a source-to-source transformation tool that can replace outdated constructs with C++11 constructs, but it simply modifies your source file in place, it does not provide feedback without the user running a before-and-after diff.
from cpp.
I think warnings are more useful than transformations, except where there's a language-wide consensus (such as with Go - Go has both go fmt
that does transformations for everything that is completely accepted, and go lint
for style warnings). This is because I think it's interesting to have the discussions about why one choice might be better than another, rather than just enforcing a choice.
In this case I think that cppcheck
sounds like a better choice.
from cpp.
Yeah, cppcheck
is better for providing this sort of feedback. For instance, cppcheck
will issue an error when you use iterators over containers along with container modifying operations in such a way that the iterators are invalidated and you're going off into undefined behavior. It also will nitpick you on things like bit shifting signed quantities in ways that lead to undefined behavior, memory leaks, etc. Those all fall into the error category.
Things get more interesting when you turn on style and performance warnings. Then you get things like preferring ++iter
instead of iter++
unless you need the previous value of iter
. While cppcheck
isn't the greatest, I think it is easy to use, easy to deploy and the messages are easy to interpret.
from cpp.
cool, it sounds like a good choice.
from cpp.
How about clang-tidy?
from cpp.
Related Issues (20)
- clock: the test timed out HOT 4
- Missing semi-colon in 'interest-is-interesting' tutorial HOT 4
- Building a training set of tags for cpp HOT 26
- fix: spelling mistake in classes docs
- pop-count: The header file tab is missing. HOT 3
- doctor-data: typo HOT 2
- Doctor Data skeleton contains garbage HOT 2
- ESP-AT: CMake error: Does not match the generator used previously: Ninja HOT 3
- feat: add approaches for leap exercise
- Make double testing more robust for freelancer rates cocnept exercise
- Update test cases HOT 37
- Add #48in24 featured exercises HOT 19
- Tweak troll exercise
- Passthrough mode - I receive ERROR when I send a packet HOT 2
- log-levels concept exercise needs a more fleshed-out stub HOT 3
- parallell-letter-frequency tests are missing some assertions HOT 2
- CI: Only run tests on exercises, when exercise relevant files are changed
- Formatting check in CI is broken HOT 7
- disregard, wrong project :-/ HOT 1
- doctor-data task 4 "get_older_bob" is confusing HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpp.