27 ms·
> All code must be compiled, from the first day of development, with all compiler warnings enabled at the compiler’s most pedantic setting. All code must compil
by jordanpg 12y ago
> All code must be compiled, from the first day of development, with all compiler warnings enabled at the compiler’s most pedantic setting. All code must compile with these setting without any warnings. All code must be checked daily with at least one, but preferably more than one, state-of-the-art static source code analyzer and should pass the analyses with zero warnings.
Wow, am I ever frustrated by the summary ignoring of warnings I see going on around me. I spend my spare time at work making warnings go away and deleting uncommented @SupressWarnings from our codebase.
In a word, KISS. Another engineer designing critical systems for the US government coined that one, apparently [1].
[1] http://en.wikipedia.org/wiki/KISS_principle http://en.wikipedia.org/wiki/KISS_principle
- jokoon 12y agoKISS needs to be taught, I really feel there should be a political movement around this principle. Maybe one good exercise would be to ask programmers to write some program, and then let people vote on which code is the simplest to read and to understand.
- bprs 12y agoAny recommendation of a good static source code analyzer for C++ ?
- RogerL 12y agoPVS Studio has always seemed to catch the most errors for me. It is by far worth the price if you s/w is at all important to you. But no tool is perfect. I also run cppcheck, Microsoft's VS (never liked that one much). Haven't tried Clang because I am on Windows for my C++ stuff.
- AndreyKarpov 12y agoUpdatable List of Open-Source Projects Checked with PVS-Studio: http://www.viva64.com/en/a/0084/ http://www.viva64.com/en/a/0084/
- raverbashing 12y agoOf course, this is not as simple as it seems. 1 - Some tools and libraries (like GTK - yeah) like to throw unfixable warnings. "Yeah, this platform is missing this feature so let's throw a warning" 2 - Sometimes fixing a warning results in something much more complicated than the original code. (see for example half of PyLint warnings) So, for that to work it's important the tool warnings are good (and at least with GCC on C they usually are)
- RogerL 12y agoWhen I did mission critical work we basically did not use libraries if at all possible. You need to know how everything works, and you need to be able to fix it. I'm pretty sure the NASA paper is written within that context. But yes, that is a huge pet peeve of mine. I have all my QT header includes wrapped with pragmas to turn off warning because otherwise they spit out endless, useless warnings.
- smackfu 12y ago3 - a compiler adds a new warning that triggers on existing code. So when you go to do a minor fix, do you also touch other code that now triggers a warning?
- raverbashing 12y agoTrue. Tell me about it. Or worse, they break existing code (I've seen this happen with C++ on GCC)
- ErrantX 12y agoA related class of problems is code coverage with unit tests; I have a regular argument here as to why we "aim for 80% code coverage but in practice accept 50-60%"
- tormeh 12y agoThen there's Clang's struct alignment warnings using -Weverything. "Oh no, your struct will have 3 bytes of padding!" Made me turn off -Werror. Some warnings can be ignored.
- BudVVeezer 12y agoIt's shocking to see how often people write code like: memcpy(somePtr, &myStructObj, 12); So while that warning can certainly be useless information, it does definitely catch bugs. Unfortunately, the people who write code like the above are also more likely to be people who ignore warnings. ;-)
- RogerL 12y agoMaybe you are being too specific in your example, and thus I am being nitpicky rather than helpful, but wouldn't that be caught by a static analyzer?
- BudVVeezer 12y agoI just tried the following simple example: #include <string.h> struct S { int i; char c; int j; }; void f(void) { struct S s1 = { 0, 0, 0 }, s2 = { 0, 0, 0 }; memcpy(&s1, &s2, 9); } int main(void) { f(); return 0; } MSVC, Clang, and PC-Lint are all silent on the code (which is reasonable behavior since it's impossible to glean programmer intent from that snippet -- maybe the programmer really only wants the first nine bytes!). (Btw, yes, I am using the analyzer features for MSVC and Clang, not just relying on high warning levels.)
- fit2rule 12y agoAll warnings are an indicator that things are not going as planned - which means some aspect of the code is either unplanned/misplanned/misunderstood. A warning is a clue that things are not as they seem..
- jacquesm 12y agoIn some contexts that's actually an extremely useful warning.