5 ms·
How to avoid (if you're a C programmer) writing utterly terrible code - always include these WARNINGS in your build step: WARNINGS := -Wall -W -Wunused-paramet
by torpor 17y ago
How to avoid (if you're a C programmer) writing utterly terrible code - always include these WARNINGS in your build step:
WARNINGS := -Wall -W -Wunused-parameter -Wmissing-declarations
WARNINGS += -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare
WARNINGS += -Wconversion -Wshadow -Wcast-align -Wparentheses
WARNINGS += -Wsequence-point -Wdeclaration-after-statement -Wundef
WARNINGS += -Wpointer-arith -Wnested-externs -Wredundant-decls
WARNINGS += -Werror -Wdisabled-optimization -pedantic
CFLAGS += $(WARNINGS)
Note: -pedantic is pretty good if you really wanna learn how to write code that will work properly.
Also: Treating Warnings as Errors is a good thing. You'll learn a lot, and the most important thing will be: handle all warnings. Do not release code until it builds clean.
- sfk 17y agoGood advice, but compilers often issue warnings like "x may be used uninitialized" even when it cannot happen.
- torpor 17y agoErm, wut? Not really. If there is a warning, its there for a reason. Fix that.
- sfk 17y agoAs everyone who has written a C program of sufficient complexity knows, these warnings are not always correct. Google for "spurious warnings uninitialized", e.g: http://kerneltrap.org/node/6591 http://kerneltrap.org/node/6591 An unrelated example where gcc (and icc) emit needless warnings about integer types is this: int x = foo(); unsigned y = (x == 0); Don't get me wrong, I'm in favor of cranking up the warning levels, but there is a reason why not everything is included in -Wall (yes, "uninitialized" is included, I know).
- torpor 17y agoAs a professional C coder for 20+ years, with well over a million lines of code under my belt, I can tell you that anyone that is ignoring warnings because of a buggy compiler is using the wrong compiler and should fix that immediately. I work on SIL-4 rated systems for life-protection applications. Absolutely ZERO TOLERANCE for warnings is a requirement in this job, and every single time it has been addressed, the warning gave us a clue how to fix something. Whether it was the code that needed fixing, or the compiler - either way, the alert is there. Ignore at your own peril.