680 likes | 1.09k Views
CS 2130. Presentation 04 The C Programming Language. Oh, Say Can You C?. Oh, Say Can You C?. The C Programming Language is Simple Not too many keywords. auto break case char const continue default do double else enum extern
E N D
CS 2130 Presentation 04 The C Programming Language
Oh, Say Can You C? • The C Programming Language is • Simple • Not too many keywords auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Oh, Say Can You C? • The C Programming Language is • Simple • Not too many keywords • Fairly simple syntax • Concise: Doesn't require much typing
Oh, Say Can You C? • The C Programming Language is • Simple • Useless • Doesn't have any I/O commands • Doesn't have strings • Doesn't have useful math functions (use Fortran!)
Oh, Say Can You C? • The C Programming Language is • Simple • Useless • Complex/Complicated • Requires libraries • Libraries can grow in size/complexity • Search Google for "C Libraries" • Libraries are available by platform • Non-standardization...always a problem • There is an ANSI C Library
A First Try C Program #include <stdio.h> main() { printf(“Hello, world!\n”); return 0; }
? A First Try C Program #include <stdio.h> main() { printf(“Hello, world!\n”); return 0; }
Recall • Modules can (and often should be) compiled at different times. • Suppose we are compiling module A: int x = 7; int y = 42; float z; ... z = someFunction(x, y); • Is the function call okay?
Originally... • C just hoped for the best • With ANSI C things improved • We can write: float someFunction(int a, int b) { /* What it does */ } • and we can write a prototype: float someFunction(int a, int b);
The Compiler Uses the Prototype... ...to error check the function calls for parameter type and number as well as return value. • The prototypes can be • Just placed at the beginning of the file OR • Placed in special files called header files (.h) • The #include statement is "including" one in our example (more later)
Header Files • Contain prototypes • Not libraries • Some common header files: stdio.h stdlib.h unistd.h • Weiss Appendix D is your friend!
Header Files WARNING: Header files (.h) are for function prototypes as well as for certain items such as definitions of new types EXECUTABLE CODE SHOULD NEVER GO INTO A HEADER FILE!!!
Error Side Note • While we are mentioning functions... • Unlike Java, C does not allow function overloading • Java public void someFunction(int i) { } public void someFunction(float x) { } • C void someFunction(int i) { } void someFunction(float x) { }
Back to live action! #include <stdio.h> main() { printf(“Hello, world!\n”); return 0; } OK?
main returns a value #include <stdio.h> int main() { printf(“Hello, world!\n”); return 0; } To where and why?
main returns a value #include <stdio.h> int main() { printf(“Hello, world!\n”); return 0; } 0 means okay, right? But wait, 0 is false so maybe it's a bad result?
A First Try C Program #include <stdio.h> #include <stdlib.h> intmain() { printf(“Hello, world!\n”); return EXIT_SUCCESS; } Weiss Appendix D is your friend! OK?
printf prototype int printf( const char *Format, ... ); What's this?
A First Try C Program #include <stdio.h> #include <stdlib.h> intmain() { (void) printf(“Hello, world!\n”); return EXIT_SUCCESS; } Don't Do This!!!
Why the (void)? • printf(3) wants to return something • The C compiler will assume that you are just throwing the return value away • lint will reject it • You will do poorly • Next thing you know...you're serving fries at McDonalds • Note: This is not to say that there is anything wrong with people who serve fries at McDonalds The McDonalds Corporation in no way endorses anything on this slide.
But seriously... • Major objective of course? • Teach you how to write small test programs that will be graded and discarded? • Teach you how to write programs that are part of large systems that control machines or devices that may affect human life, large amounts of capital, the well being of thousands of employees and/or stockholders?
Easier To learn how to do it the right way right from the start! Law of Primacy: "That which is learned first is learned best"
June 28, 2002: NEW YORK (Reuters) - Software bugs are not just annoying or inconvenient. They're expensive. According to a study by the U.S. Department of Commerce's National Institute of Standards and Technology (NIST), the bugs and glitches cost the U.S. economy about $59,500,000,000 (59.5 billion) a year. The impact of software errors is enormous because virtually every business in the United States now depends on software for the development, production, distribution, and after-sales support of products and services," NIST Director Arden Bement said in a statement on Friday. Software users contribute about half the problem, while developers and vendors are to blame for the rest, the study said. The study also found that better testing could expose the bugs and remove bugs at the early development stage could reduce about $22.2 billion of the cost. "Currently, over half of all errors are not found until 'downstream' in the development process or during post-sale software use," the study said.
What can go wrong? • Date: July 22, 1962 • Program: Mariner I, Atlas-Agena rocket. • Cost: $18.5 million • Error: Used raw value instead of average • Result: Rocket blown up by range safety officer
What can go wrong? • Date: Mid 70's • Program: NASA satellites • Cost: 10 year delay in knowing of problem • Error: Data processing program ignored values that were very low. • Result: Holes in Ozone layers were not discovered until 1986.
What can go wrong? • Date: July 20, 1969 • Program: Apollo, first manned landing on moon. • Cost: Almost... • Error: Programmers left debugging messages in code • Result: Sloppy last-minute changes caused a system that was not even in use to start generating "alarms" • Comment: Mission controller had been warned of "alarms". Had 19 seconds to make correct decision!
What can go wrong? • Date: December, 1999 • Program: Mars Polar Lander • Cost: $185 million • Error: Signaling problem in the landing legs caused by one line of missing computer code • Result: Lander lost, presumed crash-landed
And now a "positive" outcome • Date: July, 1997 • Program: Mars Pathfinder mission • Error: System periodically reset itself, cause unknown • Solution: JPL engineers had fortuitously left the RTOS debugger/interpreter enabled in the software when it was installed. This allowed them to test and debug the mission software in situ. The fault was isolated, and a short C program was written and uploaded to the spacecraft. This program, when interpreted, fixed the problem • Result: No more resets occurred
And now a "positive" outcome • Software designers had sacrificed "correct" software behavior for the sake of expediency and to meet mission deadlines (sound familiar?) • Diagnosing the problem without direct access to the running system would have proved impossible • Leaving the debugger installed and enabled saved the project • Note: JPL engineers later confessed that a few unexplained resets had occurred during initial testing. The resets were not reproducible or explainable, and did not occur in what were considered to be "mission critical" parts of the software. They were eventually dismissed as the result of "hardware glitches".
What can go wrong? • Date: Spring 1992 • Program: Canadian Vote-by-Phone System • Cost: No manual backup...system response too slow. Some people couldn't vote. Some people voted more than once. • Error: Bad assumptions about system performance. No backup plan. • Result: Chaos and embarrassment for political party and TPC
What can go wrong? • Date: November 20, 1985 • Program: Bank of New York Program to track government securities transactions. • Cost: $5 million • Error: Latest transaction continuously overwriting last transaction Lost $32 BILLION. With effort had that down to only $23.6 BILLION by end of the day. $5 million was interest to cover missing funds for 2 days!!! • Result: Bank lost confidence of investors. • Comment: Disruption of econometric models.
What can go wrong? • Date: June and early July of 1991 • Program: Telephone switching software DSC Communication • Cost: Unknown (but a bunch) • Error: After 13 weeks of successful testing changed 3 lines out of several million. • Result: A series of outages affected telephone users in Los Angeles, San Francisco, Washington, D.C., Virginia, W. Virginia, Baltimore, and Greensboro, N.C. • Comment: They knew what that change did, and they were confident that it did nothing else.(2) And presumably, the customer wanted it now.
What can go wrong? • Date: June 1985 - January 1987 • Program: Therac 25. Computer controlled radiation therapy machine. • Cost: 6 patients died horribly painful deaths • Error: Machine had two modes: Electrons, X-rays. Software bug caused machine to run at power setting 100 times too high. • Result: Patients physically felt pain from beam. Rapidly developed radiation sickness and died agonizing deaths over the course of several months. • Comment: First model to rely strictly on computer control instead of mechanical interlocks.
What can go wrong? • Date: February 25, 1991 • Program: Patriot Missile System/Gulf War • Cost: Killed 28 Wounded 98 American Soldiers • Error: Tracking radar had a cumulative error bug which would be fixed if system was shutdown every day. • Result: Guidance system "lost" incoming "Scud" missle
What can go wrong? • Comment: The bug was noticed almost as soon as the Gulf War began. By February 25th, it had actually been fixed, but the programmers at Raytheon also wanted to fix other bugs deemed more critical. By the time all the bugs had been fixed--and a new version of the software had been copied onto tape-- the tape had been sent to Ft. McGuire Air Force Base--and then flown to Riyadh--and then trucked to Dhahran--and then loaded into the Patriot installation--well, by that time it was February 26th, and the dead were already dead, and the war was just about over.
Bug Free Software • We want bug free software • Is it possible? • Two strategies
Bug Free Software Error • We want bug free software • Is it possible? • Two strategies Error