C Language

Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

6.

087 Lecture 1 January 11, 2010

Introduction to C

Writing C Programs

Our First C Program

What is C?

Dennis Ritchie AT&T Bell

Laboratories 1972
16-bit DEC PDP-11

computer (right) Widely used today extends to newer system architectures efciency/performance low-level access

Features of C

C features:
Few keywords Structures, unions compound data types Pointers memory, arrays External standard library I/O, other facilities Compiles to native code Macro preprocessor

Versions of C

Evolved over the years:


1972 C invented 1978 The C Programming Language published; rst

specication of language
1989 C89 standard (known as ANSI C or Standard C) 1990 ANSI C adopted by ISO, known as C90
1999 C99 standard
mostly backward-compatible not completely implemented in many compilers 2007 work on new C standard C1X announced

In this course: ANSI/ISO C (C89/C90)

What is C used for?

Systems programming:
OSes, like Linux microcontrollers: automobiles and airplanes embedded processors: phones, portable electronics, etc. DSP processors: digital audio and TV systems
. . .

C vs. related languages

More recent derivatives: C++, Objective C, C# Inuenced: Java, Perl, Python (quite different) C lacks: exceptions range-checking garbage collection
object-oriented programming
polymorphism
. . .
Low-level language faster code (usually)

Warning: low-level language!

Inherently unsafe:
No range checking Limited type safety at compile time No type checking at runtime

Handle with care.


Always run in a debugger like gdb (more later. . . ) Never run as root Never test code on the Athena1 servers
1 Athena is MIT's UNIX-based computing environment. OCW does not provide access to it.

6.087 Lecture 1 January 11, 2010

Introduction to C

Writing C Programs

Our First C Program

Editing C code

.c extension Editable directly

More later. . .

Compiling a program

gcc (included with most Linux distributions): compiler .o extension omitted for common programs like gcc

More about gcc

Run gcc: athena%1 gcc -Wall infilename.c -o outfilename.o -Wall enables most compiler warnings More complicated forms exist multiple source les auxiliary directories
optimization, linking
Embed debugging info and disable optimization: athena% gcc -g -O0 -Wall infilename.c -o outfilename.o
1 Athena is MIT's UNIX-based computing environment. OCW does not provide access to it.

Debugging

Figure: gdb: command-line debugger


10

Using gdb

Some useful commands:


break linenumber create breakpoint at specied line break file:linenumber create breakpoint at line in

le
run run program
c continue execution
next execute next line step execute next line or step into function quit quit gdb print expression print current value of the specied

expression
help command in-program help

11

Memory debugging

Figure: valgrind: diagnose memory-related problems


12

The IDE all-in-one solution

Popular IDEs: Eclipse (CDT), Microsoft Visual C++

(Express Edition), KDevelop, Xcode, . . .


Integrated editor with compiler, debugger Very convenient for larger programs

Courtesy of The Eclipse Foundation. Used with permission.

13

Using Eclipse

Need Eclipse CDT for C programs (see

http://www.eclipse.org/cdt/)
Use New > C Project choose Hello World ANSI C Project for simple project Linux GCC toolchain sets up gcc and gdb (must be installed separately) Recommended for nal project

14

6.087 Lecture 1 January 11, 2010

Introduction to C

Writing C Programs

Our First C Program

15

Hello, 6.087 students

In style of Hello, world! .c le structure Syntax: comments, macros, basic declarations The main() function and function structure Expressions, order-of-operations Basic console I/O (puts(), etc.)

15

Structure of a .c le

/* Begin with comments about file contents */ Insert #include statements and preprocessor definitions Function prototypes and variable declarations Define main() function { Function body } Define other function { Function body } . . .
16

Comments

Comments: / this is a simple comment / Can span multiple lines


/ T h i s comment
spans
m u l t i p l e l i n e s /

Completely ignored by compiler Can appear almost anywhere


/ h e l l o . c our f i r s t C program Created by D a n i e l Weller , 01/11/2010 /

17

The #include macro

Header les: constants, functions, other declarations #include <stdio.h> read the contents of the header le

stdio.h
stdio.h: standard I/O functions for console, les
/ h e l l o . c our f i r s t C program Created by D a n i e l Weller , 01/11/2010 / # include < s t d i o . h> / b a s i c I /O f a c i l i t i e s /

18

More about header les

stdio.h part of the C Standard Library other important header les: ctype.h, math.h, stdlib.h, string.h, time.h For the ugly details: visit http: //www.unix.org/single_unix_specification/ (registration required) Included les must be on include path -Idirectory with gcc: specify additional include directories standard include directories assumed by default #include "stdio.h" searches ./ for stdio.h rst

19

Declaring variables

Must declare variables before use Variable declaration:


int n;
oat phi;

int - integer data type float - oating-point data type Many other types (more next lecture. . . )

20

Initializing variables

Uninitialized, variable assumes a default value Variables initialized via assignment operator:
n = 3;

Can also initialize at declaration:

oat phi = 1.6180339887;

Can declare/initialize multiple variables at once:


int a, b, c = 0, d = 4;

21

Arithmetic expressions

Suppose x and y are variables


x+y, x-y, x*y, x/y, x%y: binary arithmetic A simple statement:

y = x+3x/(y4);

Numeric literals like 3 or 4 valid in expressions Semicolon ends statement (not newline) x += y, x -= y, x *= y, x /= y, x %= y: arithmetic

and assignment

22

Order of operations

Order of operations:

Operator +,- (sign) *,/,% +,=,+=,-=,*=,/=,%=

Evaluation direction right-to-left left-to-right left-to-right right-to-left

Use parentheses to override order of evaluation

23

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;

24

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;
2. Evaluate multiplies and divides, from left-to-right oat z = x+3x/2.0; oat z = x+6.0/2.0; oat z = x+3.0;

24

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;
2. Evaluate multiplies and divides, from left-to-right oat z = x+3x/2.0; oat z = x+6.0/2.0; oat z = x+3.0; 3. Evaluate addition
oat z = x+3.0; oat z = 5.0;

24

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;
2. Evaluate multiplies and divides, from left-to-right oat z = x+3x/2.0; oat z = x+6.0/2.0; oat z = x+3.0; 3. Evaluate addition
oat z = x+3.0; oat z = 5.0;
4. Perform initialization with assignment
Now, z = 5.0.

24

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;
2. Evaluate multiplies and divides, from left-to-right oat z = x+3x/2.0; oat z = x+6.0/2.0; oat z = x+3.0; 3. Evaluate addition
oat z = x+3.0; oat z = 5.0;
4. Perform initialization with assignment
Now, z = 5.0.
How do I insert parentheses to get z = 4.0?

24

Order of operations

Assume x = 2.0 and y = 6.0. Evaluate the statement


oat z = x+3x/(y4);

1. Evaluate expression in parentheses


oat z = x+3x/(y4); oat z = x+3x/2.0;
2. Evaluate multiplies and divides, from left-to-right oat z = x+3x/2.0; oat z = x+6.0/2.0; oat z = x+3.0; 3. Evaluate addition
oat z = x+3.0; oat z = 5.0;
4. Perform initialization with assignment
Now, z = 5.0.
How do I insert parentheses to get z = 4.0?
oat z = (x+3x)/(y4);

24

Function prototypes

Functions also must be declared before use Declaration called function prototype Function prototypes:
int factorial ( int );

or

int factorial ( int n);

Prototypes for many common functions in header les for

C Standard Library

25

Function prototypes

General form:

return_type function_name(arg1,arg2,...);
Arguments: local variables, values passed from caller Return value: single value returned to caller when function

exits
void signies no return value/arguments
int rand(void);

26

The main() function

main(): entry point for C program Simplest version: no inputs, outputs 0 when successful,

and nonzero to signal some error


int main(void);

Two-argument form of main(): access command-line

arguments
int main(int argc, char argv);

More on the char **argv notation later this week. . .

27

Function denitions

Function declaration { declare variables; program statements; } Must match prototype (if there is one)
variable names dont have to match
no semicolon at end Curly braces dene a block region of code Variables declared in a block exist only in that block Variable declarations before any other statements

28

Our main() function

/ The main ( ) f u n c t i o n / i n t main ( void ) / e n t r y p o i n t / { / w r i t e message t o console / p u t s ( "hello, 6.087 students" ) ; r e t u r n 0 ; / e x i t ( 0 => success ) / }

puts(): output text to console window (stdout) and end

the line
String literal: written surrounded by double quotes return 0;

exits the function, returning value 0 to caller

29

Alternative main() function

Alternatively, store the string in a variable rst:


i n t main ( void ) / e n t r y p o i n t /
{
const char msg [ ] = "hello, 6.087 students" ;
/ w r i t e message t o console / p u t s ( msg ) ;

const keyword: qualies variable as constant char: data type representing a single character; written in

quotes: a, 3, n
const char msg[]: a constant array of characters

30

More about strings

Strings stored as character array Null-terminated (last character in array is \0 null) Not written explicitly in string literals Special characters specied using \ (escape character): \\ backslash, \ apostrophe, \ quotation mark \b, \t, \r, \n backspace, tab, carriage return, linefeed \ooo, \xhh octal and hexadecimal ASCII character codes, e.g. \x41 A, \060 0

31

Console I/O

stdout, stdin: console output and input streams puts(string): print string to stdout putchar(char): print character to stdout char = getchar(): return character from stdin string = gets(string): read line from stdin into

string
Many others - later this week

32

Preprocessor macros

Preprocessor macros begin with # character


#include <stdio.h>

#dene msg "hello, 6.087 students"

denes msg as hello, 6.087 students throughout source le


many constants specied this way

33

Dening expression macros

#dene can take arguments and be treated like a function


#dene add3(x,y,z) (( x)+(y)+(z))

parentheses ensure order of operations compiler performs inline replacement; not suitable for

recursion

34

Conditional preprocessor macros

#if , #ifdef, #ifndef, #else, # elif , #endif

conditional preprocessor macros, can control which lines are compiled


evaluated before code itself is compiled, so conditions must

be preprocessor denes or literals


the gcc option -Dname=value sets a preprocessor dene

that can be used


Used in header les to ensure declarations happen only

once

35

Conditional preprocessor macros

#pragma

preprocessor directive
#error, #warning

trigger a custom compiler error/warning


#undef msg

remove the denition of msg at compile time

36

Compiling our code

After we save our code, we run gcc:


athena%1 gcc -g -O0 -Wall hello.c -o hello.o

Assuming that we have made no errors, our compiling is complete.

1 Athena is MIT's UNIX-based computing environment. OCW does not provide access to it.

37

Running our code

Or, in gdb,
athena% gdb hello.o
.
. . Reading symbols from hello.o...done. (gdb) run Starting program: hello.o hello, 6.087 students Program exited normally.
(gdb) quit
athena%

Athena is MIT's UNIX-based computing environment. OCW does not provide access to it.

38

Summary

Topics covered:
How to edit, compile, and debug C programs C programming fundamentals:
comments
preprocessor macros, including #include the main() function declaring and initializing variables, scope using puts() calling a function and passing an argument returning from a function

39

MIT OpenCourseWare http://ocw.mit.edu

6.087 Practical Programming in C


IAP 2010

For information about citing these materials or our Terms of Use,visit: http://ocw.mit.edu/terms.

You might also like