Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Defensive programming
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Offensive programming == {{main|Offensive programming}} Offensive programming is a category of defensive programming, with the added emphasis that certain errors should ''not'' be [[graceful degradation|handled defensively]]. In this practice, only errors from outside the program's control are to be handled (such as user input); the software itself, as well as data from within the program's line of defense, are to be trusted in this [[methodology]]. === Trusting internal data validity === ;Overly defensive programming <syntaxhighlight lang="c"> const char* trafficlight_colorname(enum traffic_light_color c) { switch (c) { case TRAFFICLIGHT_RED: return "red"; case TRAFFICLIGHT_YELLOW: return "yellow"; case TRAFFICLIGHT_GREEN: return "green"; } return "black"; // To be handled as a dead traffic light. } </syntaxhighlight> ;Offensive programming <syntaxhighlight lang="c"> const char* trafficlight_colorname(enum traffic_light_color c) { switch (c) { case TRAFFICLIGHT_RED: return "red"; case TRAFFICLIGHT_YELLOW: return "yellow"; case TRAFFICLIGHT_GREEN: return "green"; } assert(0); // Assert that this section is unreachable. } </syntaxhighlight> === Trusting software components === ;Overly defensive programming <syntaxhighlight lang="c"> if (is_legacy_compatible(user_config)) { // Strategy: Don't trust that the new code behaves the same old_code(user_config); } else { // Fallback: Don't trust that the new code handles the same cases if (new_code(user_config) != OK) { old_code(user_config); } } </syntaxhighlight> ;Offensive programming <syntaxhighlight lang="c"> // Expect that the new code has no new bugs if (new_code(user_config) != OK) { // Loudly report and abruptly terminate program to get proper attention report_error("Something went very wrong"); exit(-1); } </syntaxhighlight>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)