CS 2130 - PowerPoint PPT Presentation

About This Presentation
Title:

CS 2130

Description:

Date: June and early July of 1991. Program: Telephone switching software ... Date: July 20, 1969. Program: Apollo, first manned landing on moon. ... 20, 1985 ... – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 48
Provided by: ble87
Category:
Tags: july

less

Transcript and Presenter's Notes

Title: CS 2130


1
CS 2130
  • Lecture 3
  • The C Programming Language

2
Oh, Say Can You C?
3
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
4
Oh, Say Can You C?
  • The C Programming Language is
  • Simple
  • Not too many keywords
  • Fairly simple syntax
  • Concise Doesn't require much typing

5
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!)

6
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

7
But how hard can it be?
8
A First Try C Program
  • include ltstdio.hgt
  • main()
  • printf(Hello, world!\n)
  • return 0

9
A First Try C Program
  • include ltstdio.hgt
  • main()
  • printf(Hello, world!\n)
  • return 0

10
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?

11
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 write a prototype
  • float someFunction(int a, int b)

12
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)

13
Header Files
  • Contain prototypes
  • Not libraries
  • Some common header files
  • stdio.h
  • stdlib.h
  • unistd.h
  • Weiss Appendix D is your friend!

14
Back to live action!
  • include ltstdio.hgt
  • main()
  • printf(Hello, world!\n)
  • return 0

OK?
15
main returns a value
  • include ltstdio.hgt
  • int main()
  • printf(Hello, world!\n)
  • return 0

To where and why?
16
main returns a value
  • include ltstdio.hgt
  • int main()
  • printf(Hello, world!\n)
  • return 0

0 means okay, right? But wait, 0 is false so
maybe it's a bad result?
17
A First Try C Program
  • include ltstdio.hgt
  • include ltstdlib.hgt
  • int main()
  • printf(Hello, world!\n)
  • return EXIT_SUCCESS

Weiss Appendix D is your friend!
OK?
18
printf prototype
  • int printf( const char Format, ... )

What's this?
19
A First Try C Program
  • include ltstdio.hgt
  • include ltstdlib.hgt
  • int main()
  • (void) printf(Hello, world!\n)
  • return EXIT_SUCCESS

20
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

21
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?

22
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"

23
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

24
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

25
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.

26
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!

27
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

28
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.

29
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.

30
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

31
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.

32
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.

33
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

34
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".

35
Bug Free Software
  • We want bug free software
  • Is it possible?
  • Two strategies

36
Bug Free Software
Error
  • We want bug free software
  • Is it possible?
  • Two strategies

Error
37
Strategy One
  • You write software
  • Testing department rigorously tests software
    applying specifications

38
Strategy 2
  • You write software
  • You build in code to handle every possible thing
    that might go wrong
  • You test code knowing how code works. This
    includes testing for special cases, etc.
  • You request the compiler warn you of every
    possible problem (plus you use lint)
  • Testing department rigorously tests software
    applying specifications

39
Bottom Line
  • We want you to program like you're an anal
    retentive paranoid delusional programmer.
  • Not just for this course!

40
Style
  • Everything Returns Something
  • a b c 0
  • So which is better?
  • a b c 0
  • OR
  • a 0
  • b 0
  • c 0

41
No such thing...
  • ...as a program that is 100 correct.

42
Eiselts Lemma
  • More important for a program to be understandable
    than correct

43
Style
  • Pick a style
  • Use it consistently
  • Program appearance should reflect clarity of
    thought
  • Precedence
  • Need to look it up
  • Use parentheses

44
Capital Crimes
  • Doesnt compile
  • Dumps core
  • Spurious output
  • No mercy rule
  • Remember
  • gcc -Wall -O2 -ansi -pedantic
  • (Note TAs call this "gcc -Peter" - ask them
    why!)
  • plus
  • lint free where possible (acme)

45
Things to Know
  • Short circuit evaluation
  • break and continue statements
  • ? (for optimum performance, but use sparingly)
  • goto statement
  • Call by Value (Pass by Value)

46
Questions?
47
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com