Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Introduction to C programming 1
Introduction to C programming
3 lectures
9, 15, 22 september
(wednesday at 11:00-12:45 Q10...
Introduction to C programming 2
Purpose of these lectures
• Crash course in C
• Related to Computer Networks Practical wor...
Introduction to C programming 3
Purpose of these lectures
• Crash course in C
Empasis on the differences between Java and C...
Introduction to C programming 4
Literature
• Reader (C for Java programmers)
• Books
The C Programming Language (Kernighan...
Introduction to C programming 5
Overview
• Very short history of C
• Overview of the differences between C and Java
• The C...
Introduction to C programming 6
History of C
• Created in the mid-70’s as a follow up to
the ’B’ and ’BCPL’ languages
• St...
Introduction to C programming 7
History of C
• Development of C is related to development of Unix
• Unix initially program...
Introduction to C programming 8
History of C
• Compared to assembly, C is
high level (C has functions, while and for loops...
Introduction to C programming 9
Major differences between C and Java (1)
• C is procedural not object oriented
C has no obj...
Introduction to C programming 10
Major differences between C and Java (2)
• C has array bounds, null pointer or cast checks...
Introduction to C programming 11
Major differences between C and Java (3)
• C has pointers
similar to references but ...
.....
Introduction to C programming 12
Major differences between C and Java (4)
• Compared to Java, C is a low-level language
you...
Introduction to C programming 13
Keywords
• There are 32 keywords in C:
auto break case char
const continue default do
dou...
Introduction to C programming 14
Keywords
• There are 32 keywords in C:
auto break case char
const continue default do
dou...
Introduction to C programming 15
Keywords
• There are 32 keywords in C:
auto break case char
const continue default do
dou...
Introduction to C programming 16
Keywords
• There are 32 keywords in C:
auto break case char
const continue default do
dou...
Introduction to C programming 17
Program Structure (1)
• A Java program consists of
several classes, each in different file....
Introduction to C programming 18
Program Structure (2)
• A C program consists of
several functions, in one or more files.
a...
Introduction to C programming 19
Example program
#include <stdio.h>
double global;
/∗ This is a comment ∗/
int main(int ar...
Introduction to C programming 20
Example program
−> #include <stdio.h>
double global;
/∗ This is a comment ∗/
int main(int...
Introduction to C programming 21
Example program
#include <stdio.h>
−> double global;
/∗ This is a comment ∗/
int main(int...
Introduction to C programming 22
Example program
#include <stdio.h>
double global;
/∗ This is a comment ∗/
−> int main(int...
Introduction to C programming 23
Main function (1)
• main is special (like in Java)
• Always returns an int
• Syntax:
int ...
Introduction to C programming 24
Main function (2)
• The first form gets the command line arguments
int argc number of para...
Introduction to C programming 25
Example program
#include <stdio.h>
double global;
/∗ This is a comment ∗/
int main(int ar...
Introduction to C programming 26
Compiling
• Compile this program like this:
gcc -Wall exampleMain.c
• The result is an ex...
Introduction to C programming 27
Example program
#include <stdio.h>
−> double global;
/∗ This is a comment ∗/
−> int main(...
Introduction to C programming 28
Basic Types (1)
• In C the size of the basic types is not defined
• Instead, the size depe...
Introduction to C programming 29
Basic Types (2)
• An int, for example:
is always 32 bits in Java
is the natural size for ...
Introduction to C programming 30
Basic Types (3)
type C (official) C (pc+gcc) Java
char 8 8 16
short >= 16 and <= int 16 16
...
Introduction to C programming 31
Basic Types (4)
• sizeof determines the size of a type (in bytes)
#include <stdio.h>
int ...
Introduction to C programming 32
Basic Types (5)
• C also supports unsigned types:
int i1; /* range -2,147,483,648 to 2,14...
Introduction to C programming 33
Booleans (1)
• C has no ’boolean’ type, use ’int’ instead
0 equals ’false’, everything el...
Introduction to C programming 34
Booleans (2)
• The ’boolean’ operators now work in ’int’ values:
1 && 0 = 0
1 && -3 = 1
7...
Introduction to C programming 35
Mistakes
• Missing an ’=’:
int y = 0;
if (y == 1) { /* not executed */ }
if (y = 1) { /* ...
Introduction to C programming 36
Mistakes
• No initialization:
int y;
if (y) { /* who knows what will happen ??? */ }
whil...
Introduction to C programming 37
Variables (1)
• C has two kinds of variables:
local (declared inside of a function)
globa...
Introduction to C programming 38
Global Variables (1)
• Global variables have file scope
they can (only) be used by all fun...
Introduction to C programming 39
Global Variables (2)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
int global = 2; |...
Introduction to C programming 40
Global Variables (2)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
−> int global = 2...
Introduction to C programming 41
Global Variables (2)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
int global = 2; |...
Introduction to C programming 42
Global Variables (3)
• To solve these problems, the following modifiers can be
used:
exter...
Introduction to C programming 43
Global Variables (4)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
|
int global = 2;...
Introduction to C programming 44
Global Variables (4)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
|
−> int global =...
Introduction to C programming 45
Global Variables (4)
/∗ file1.c ∗/ | /∗ file2.c ∗/
| #include <stdio.h>
|
int global = 2;...
Introduction to C programming 46
Local Variables (1)
• Can only be used inside a function (like in Java)
• Declaration mus...
Introduction to C programming 47
Local Variables (2)
• Also in for loops !
/∗ ok ∗/ | /∗ wrong ∗/
void function1(void) | v...
Introduction to C programming 48
Local variables (3)
• Modifiers:
auto does nothing
register try to put the variable in a r...
Introduction to C programming 49
Arrays in Java
• Java has dynamic arrays
arrays are references (created with new)
size is...
Introduction to C programming 50
Arrays in C (1)
• C has static arrays
not references but chunk of memory with a name
size...
Introduction to C programming 51
Arrays in C (2)
int a1[5]; /∗ OK ∗/
int a2[] = { 1, 2, 3 }; /∗ OK ∗/
int a3[4][5]; /∗ OK ...
Introduction to C programming 52
Arrays in C (3)
#include <stdio.h>
int main(void) {
int i;
int a1[] = { 1, 2, 3, 4, 5 };
...
Introduction to C programming 53
Strings
• In C has no real strings, only arrays of ’char’.
so strings have the same limit...
Introduction to C programming 54
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 55
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 56
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 57
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 58
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 59
Strings Examples
char name0[6];
name0[0] = ’J’;
name0[1] = ’a’;
name0[2] = ’s’;
name0[3] ...
Introduction to C programming 60
Enumerations
• enum is used to create a number of related constants
enum workdays {monday...
Introduction to C programming 61
Structures
• A struct can be used to ’combine variables’
• Fields can be accessed using a...
Introduction to C programming 62
Unions
• Look similar to structs but behave differently
• All fields use a single memory lo...
Introduction to C programming 63
Defining Types
• Using typedef new types can be defined
• Syntax: typedef type name
typedef...
Introduction to C programming 64
Functions (1)
• In C, functions can be defined in three ways:
int foo(void) { /∗ body ∗/ }...
Introduction to C programming 65
Printf
• printf is the standard print function in C.
• Many types exist (fprintf, sprintf...
Introduction to C programming 66
Printf Examples
#include <stdio.h> |
|
int main(void) { |
int val = 5; | Hello world
char...
Introduction to C programming 67
Printf (format string)
%d signed int
%u unsigned int
%x hexadecimal unsigned int
%c chara...
Introduction to C programming 68
Man pages
• man pages give more information on C functions:
man -S 3 printf
PRINTF(3) Lin...
Introduction to C programming 69
Function Prototypes (1)
• A function must be defined before it can be used
• This can be d...
Introduction to C programming 70
Function Prototypes (1)
• A function must be defined before it can be used
• This can be d...
Introduction to C programming 71
Function Prototypes (2)
• Sometimes useful to solve cyclic dependencies
• Essential when ...
Introduction to C programming 72
Function Prototypes (2)
• Example:
application split into 10 files
each uses 4 functions f...
Introduction to C programming 73
Header files
• File that only contains
type definitions
function prototypes
other preproces...
Introduction to C programming 74
Preprocessor (1)
• Preprocessor is first step of compilation.
• Compiling a file consists o...
Introduction to C programming 75
Preprocessor (2)
• Started automatically by the compiler (cpp).
• Reads and reacts to pre...
Introduction to C programming 76
Preprocessor (#include)
• #include includes a header file
• The header files will be copied...
Introduction to C programming 77
Preprocessor (#include Example)
| int printf(const char ∗__format
#include <stdio.h> −−−−...
Introduction to C programming 78
Header files (standard libs)
• There are a large number of standard header files:
stdio.h I...
Introduction to C programming 79
Preprocessor (#define)
• #define defines constants
#define LOOPS 100 |
|
void function(void...
Introduction to C programming 80
Preprocessor (#ifdef en #if)
• #ifdef and #if can be used to conditionaly compile
#define...
Introduction to C programming 81
Header files
• Header files should always look like this:
#ifndef SOME_UNIQUE_NAME
#define ...
Introduction to C programming 82
Overview (1)
• C is a procedural language suited for low-level software
compiled not inte...
Introduction to C programming 83
Overview (2)
• Basic C syntax is similar to Java, but
size of basic types is not fixed
C h...
Introduction to C programming 84
More info
• Reader
• Books
The C Programming Language, by Kernighan and
Ritchie
• Man pag...
Introduction to C programming 85
Next week
Pointers and Memory Management!
jason@cs.vu.nl
www.cs.vu.nl/~jason
www.cs.vu.nl...
Upcoming SlideShare
Loading in …5
×

College1

508 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

College1

  1. 1. Introduction to C programming 1 Introduction to C programming 3 lectures 9, 15, 22 september (wednesday at 11:00-12:45 Q105) dr. Jason Maassen email: jason@cs.vu.nl www.cs.vu.nl/~jason
  2. 2. Introduction to C programming 2 Purpose of these lectures • Crash course in C • Related to Computer Networks Practical work. www.cs.vu.nl/~cn lectures on 8, 15, 22 september (13:30-15:15 Q112)
  3. 3. Introduction to C programming 3 Purpose of these lectures • Crash course in C Empasis on the differences between Java and C. ∗ most of you know Java Some practical examples Stuff related to C-programming ∗ compiler, preprocessor, debugging, makefiles, etc.
  4. 4. Introduction to C programming 4 Literature • Reader (C for Java programmers) • Books The C Programming Language (Kernighan, Ritchie) The Complete Reference (Schildt) The C Puzzle Book (Feuer) Many others available.... • Ask amazon or google
  5. 5. Introduction to C programming 5 Overview • Very short history of C • Overview of the differences between C and Java • The C language (keywords, types, functies, etc.) • Preprocessor • Next lecture: pointers and memory management • Last lecture: compiling, linking, makefiles, debugging
  6. 6. Introduction to C programming 6 History of C • Created in the mid-70’s as a follow up to the ’B’ and ’BCPL’ languages • Standardized between 1983 and 1988 (ANSI C) • Syntax is the basis for other languages like C++, Objective-C, Java en C#
  7. 7. Introduction to C programming 7 History of C • Development of C is related to development of Unix • Unix initially programmed using assembly language assembly instructions are very low-level assembly instructions are machine specific • To make Unix more portable a high-level and portable language was needed • Result was C
  8. 8. Introduction to C programming 8 History of C • Compared to assembly, C is high level (C has functions, while and for loops, etc.) portable (only C compiler must be ported for each platform, all applications stay the same)
  9. 9. Introduction to C programming 9 Major differences between C and Java (1) • C is procedural not object oriented C has no objects, interfaces or packages a programs only consists of functions and data • C is compiled not intepreted translated directly to assembly language faster, less portable and very hard to debug.
  10. 10. Introduction to C programming 10 Major differences between C and Java (2) • C has array bounds, null pointer or cast checks you have to detect and handle all problems yourself • C has no garbage collector you have to do all of the memory management yourself
  11. 11. Introduction to C programming 11 Major differences between C and Java (3) • C has pointers similar to references but ... ... they can be use in calculations (pointer arithmetic) allows you to use the location of data in computations (not just the value) useful, powerful and a debugging nightmare!
  12. 12. Introduction to C programming 12 Major differences between C and Java (4) • Compared to Java, C is a low-level language you can and must do everything yourself suitable for low-level software like device-drivers, com- munication libraries, operating systems, etc.
  13. 13. Introduction to C programming 13 Keywords • There are 32 keywords in C: 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
  14. 14. Introduction to C programming 14 Keywords • There are 32 keywords in C: 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
  15. 15. Introduction to C programming 15 Keywords • There are 32 keywords in C: 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
  16. 16. Introduction to C programming 16 Keywords • There are 32 keywords in C: 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
  17. 17. Introduction to C programming 17 Program Structure (1) • A Java program consists of several classes, each in different file. a main method in of these classes. external class libraries (jar files)
  18. 18. Introduction to C programming 18 Program Structure (2) • A C program consists of several functions, in one or more files. a main function in of these files. possibly some header files. external libraries and their header files
  19. 19. Introduction to C programming 19 Example program #include <stdio.h> double global; /∗ This is a comment ∗/ int main(int argc, char∗∗ argv) { int local = 0; global = 0.42; for (local=0;local<argc;local++) { printf("argument[%d] = %sn", local, argv[local]); } printf("global = %fn", global); return 0; }
  20. 20. Introduction to C programming 20 Example program −> #include <stdio.h> double global; /∗ This is a comment ∗/ int main(int argc, char∗∗ argv) { int local = 0; global = 0.42; for (local=0;local<argc;local++) { printf("argument[%d] = %sn", local, argv[local]); } printf("global = %fn", global); return 0; }
  21. 21. Introduction to C programming 21 Example program #include <stdio.h> −> double global; /∗ This is a comment ∗/ int main(int argc, char∗∗ argv) { int local = 0; global = 0.42; for (local=0;local<argc;local++) { printf("argument[%d] = %sn", local, argv[local]); } printf("global = %fn", global); return 0; }
  22. 22. Introduction to C programming 22 Example program #include <stdio.h> double global; /∗ This is a comment ∗/ −> int main(int argc, char∗∗ argv) { int local = 0; global = 0.42; for (local=0;local<argc;local++) { printf("argument[%d] = %sn", local, argv[local]); } printf("global = %fn", global); return 0; }
  23. 23. Introduction to C programming 23 Main function (1) • main is special (like in Java) • Always returns an int • Syntax: int main(int argc, char∗∗ argv) { /∗ body ∗/ } int main(void) { /∗ body ∗/ }
  24. 24. Introduction to C programming 24 Main function (2) • The first form gets the command line arguments int argc number of parameters char **argv an array of ’strings’ (or: ’char arrays’) • This is the same as static void main(String [] args)
  25. 25. Introduction to C programming 25 Example program #include <stdio.h> double global; /∗ This is a comment ∗/ int main(int argc, char∗∗ argv) { int local = 0; global = 0.42; for (local=0;local<argc;local++) { −> printf("argument[%d] = %sn", local, argv[local]); } −> printf("global = %fn", global); return 0; }
  26. 26. Introduction to C programming 26 Compiling • Compile this program like this: gcc -Wall exampleMain.c • The result is an executable file a.out: ./a.out hello world argument[0] = ./a.out argument[1] = hello argument[2] = world global = 0.420000
  27. 27. Introduction to C programming 27 Example program #include <stdio.h> −> double global; /∗ This is a comment ∗/ −> int main(int argc, char∗∗ argv) { −> int local = 0; global = 0.42; for (local=0;local<argc;local++) { printf("argument[%d] = %sn", local, argv[local]); } printf("global = %fn", global); return 0; }
  28. 28. Introduction to C programming 28 Basic Types (1) • In C the size of the basic types is not defined • Instead, the size depends on which target platform is compiled for which C compiler is used
  29. 29. Introduction to C programming 29 Basic Types (2) • An int, for example: is always 32 bits in Java is the natural size for a processor in C 16 bits on a palm, 32 bits on a PC, 64 bits on an Alpha or Sparc Workstation • The minimum size is defined
  30. 30. Introduction to C programming 30 Basic Types (3) type C (official) C (pc+gcc) Java char 8 8 16 short >= 16 and <= int 16 16 int >= 16 32 32 long >= 32 32 64 float undefined 32 32 double undefined 64 64 boolean (use int) (use int) ? byte (use char) (use char) 8 long long unofficial type 64 - long double undefined 96 -
  31. 31. Introduction to C programming 31 Basic Types (4) • sizeof determines the size of a type (in bytes) #include <stdio.h> int main(void) { printf("char = %dn", sizeof(char)∗8); printf("short = %dn", sizeof(short)∗8); printf("int = %dn", sizeof(int)∗8); printf("long = %dn", sizeof(long)∗8); printf("long long = %dn", sizeof(long long)∗8); printf("float = %dn", sizeof(float)∗8); printf("double = %dn", sizeof(double)∗8); printf("long double = %dn", sizeof(long double)∗8); return 0; }
  32. 32. Introduction to C programming 32 Basic Types (5) • C also supports unsigned types: int i1; /* range -2,147,483,648 to 2,147,483,647 */ signed int i2; /* range -2,147,483,648 to 2,147,483,647 */ unsigned int i3; /* range 0 to 4,294,967,295 */ • Not for floats or doubles.
  33. 33. Introduction to C programming 33 Booleans (1) • C has no ’boolean’ type, use ’int’ instead 0 equals ’false’, everything else is ’true’: if (0) { /∗ not executed ∗/ } if (42) { /∗ executed ∗/ } int x = 100; if (x == 4) { /∗ not executed ∗/ } if (x) { /∗ executed ∗/ } while (x−−) { /∗ repeated until x equals 0 ∗/ }
  34. 34. Introduction to C programming 34 Booleans (2) • The ’boolean’ operators now work in ’int’ values: 1 && 0 = 0 1 && -3 = 1 7 || 25 = 1 !34 = 0
  35. 35. Introduction to C programming 35 Mistakes • Missing an ’=’: int y = 0; if (y == 1) { /* not executed */ } if (y = 1) { /* executed, result is 1 */ } • Wrong operator: int x = 0; int y = 1; if (x && y) { /* not executed */ } if (x & y) { /* executed, result is 1 */ }
  36. 36. Introduction to C programming 36 Mistakes • No initialization: int y; if (y) { /* who knows what will happen ??? */ } while (y--) { /* same here */ }
  37. 37. Introduction to C programming 37 Variables (1) • C has two kinds of variables: local (declared inside of a function) global (declared outside of a function) int global; void function(void) { int local; }
  38. 38. Introduction to C programming 38 Global Variables (1) • Global variables have file scope they can (only) be used by all functions in a file • Large C program’s are typically split into multiple files each contains it’s own global variables and functions their global variables can not be used in other files ...but their names may still clash!
  39. 39. Introduction to C programming 39 Global Variables (2) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> int global = 2; | int private = 5; | int private = 7; | | int main(void) | { | printf("%dn", global ∗ private); | }
  40. 40. Introduction to C programming 40 Global Variables (2) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> −> int global = 2; | int private = 5; | int private = 7; | | int main(void) | { −> | printf("%dn", global ∗ private); | } • Compile time error!
  41. 41. Introduction to C programming 41 Global Variables (2) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> int global = 2; | −> int private = 5; | int private = 7; | | int main(void) | { | printf("%dn", global ∗ private); | } • Link time error!
  42. 42. Introduction to C programming 42 Global Variables (3) • To solve these problems, the following modifiers can be used: extern it is declared in another file, but can be used in this file static it can only be seen and used in this file
  43. 43. Introduction to C programming 43 Global Variables (4) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> | int global = 2; | int private = 5; | int private = 7; | | int main(void) | { | printf("%dn", | global ∗ private); | }
  44. 44. Introduction to C programming 44 Global Variables (4) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> | −> int global = 2; | extern int global; int private = 5; | int private = 7; | | int main(void) | { | printf("%dn", | global ∗ private); | }
  45. 45. Introduction to C programming 45 Global Variables (4) /∗ file1.c ∗/ | /∗ file2.c ∗/ | #include <stdio.h> | int global = 2; | extern int global; −> static int private = 5; | static int private = 7; | | int main(void) | { | printf("%dn", | global ∗ private); | }
  46. 46. Introduction to C programming 46 Local Variables (1) • Can only be used inside a function (like in Java) • Declaration must be done in beginning of function /∗ ok ∗/ | /∗ ok ∗/ | /∗ wrong ∗/ void funct1(void) | void funct2(void) | void funct3(void) { | { | { int a, b; | int a = 0; | int a = 0; a = 0; | int b = 1; | a++; b = 1; | } | int b = 1; } | | }
  47. 47. Introduction to C programming 47 Local Variables (2) • Also in for loops ! /∗ ok ∗/ | /∗ wrong ∗/ void function1(void) | void function2(void) { | { int a, b; | int a = 0; a = 10; | a = 10; −> for (b=0;b<a;b++) { | for (int b=0;b<a;b++) { } | } } | }
  48. 48. Introduction to C programming 48 Local variables (3) • Modifiers: auto does nothing register try to put the variable in a register volatile never put the variable in a register static variable exist after function (sort of global)
  49. 49. Introduction to C programming 49 Arrays in Java • Java has dynamic arrays arrays are references (created with new) size is determined at run-time array can be replaced (because it is a reference) int [] a1, a2; a1 = new int[8]; int [] a3 = { 1, 2, 3 }; a2 = a3; a2[10] = 5; /* throws an exception */
  50. 50. Introduction to C programming 50 Arrays in C (1) • C has static arrays not references but chunk of memory with a name size determined at compile-time ∗ size must be clear from the declaration ∗ size cannot be changed arrays cannot be assigned local arrays are only valid inside the function ∗ cannot be returned as a result value
  51. 51. Introduction to C programming 51 Arrays in C (2) int a1[5]; /∗ OK ∗/ int a2[] = { 1, 2, 3 }; /∗ OK ∗/ int a3[4][5]; /∗ OK ∗/ int [] a4; /∗ PARSE ERROR ∗/ int a5[]; /∗ ERROR ∗/ int [] function(void) { /∗ PARSE ERROR ∗/ int array[5]; return array; } void foo(int a[]) { /∗ OK ∗/ a[3] = 0; } void bar(void) { int a[5]; foo(a); /∗ a is passed ’by−reference’ ∗/ a = a5; /∗ ERROR ∗/ }
  52. 52. Introduction to C programming 52 Arrays in C (3) #include <stdio.h> int main(void) { int i; int a1[] = { 1, 2, 3, 4, 5 }; int a2[] = { 1, 2, 3, 4, 5 }; a2[10] = 42; /∗ BUG ∗/ for (i=0;i<5;i++) { printf("a1[%d] = %dn", i, a1[i]); } }
  53. 53. Introduction to C programming 53 Strings • In C has no real strings, only arrays of ’char’. so strings have the same limitations as arrays strings must end with a special character nul (’0’) string functions can be used by including string.h.
  54. 54. Introduction to C programming 54 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; name0[5] = ’0’; char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; char name2[6] = "Jason"; char name3[] = "Jason"; char name4[100] = "Not 100 characters long!";
  55. 55. Introduction to C programming 55 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; −> name0[5] = ’0’; char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; char name2[6] = "Jason"; char name3[] = "Jason"; char name4[100] = "Not 100 characters long!";
  56. 56. Introduction to C programming 56 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; name0[5] = ’0’; −> char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; char name2[6] = "Jason"; char name3[] = "Jason"; char name4[100] = "Not 100 characters long!";
  57. 57. Introduction to C programming 57 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; name0[5] = ’0’; char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; −> char name2[6] = "Jason"; char name3[] = "Jason"; char name4[100] = "Not 100 characters long!";
  58. 58. Introduction to C programming 58 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; name0[5] = ’0’; char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; char name2[6] = "Jason"; −> char name3[] = "Jason"; char name4[100] = "Not 100 characters long!";
  59. 59. Introduction to C programming 59 Strings Examples char name0[6]; name0[0] = ’J’; name0[1] = ’a’; name0[2] = ’s’; name0[3] = ’o’; name0[4] = ’n’; name0[5] = ’0’; char name1[] = { ’J’, ’a’, ’s’, ’o’, ’n’, ’0’ }; char name2[6] = "Jason"; char name3[] = "Jason"; −> char name4[100] = "Not 100 characters long!";
  60. 60. Introduction to C programming 60 Enumerations • enum is used to create a number of related constants enum workdays {monday, tuesday, wednesday, thursday, friday }; enum workdays today; today = tuesday; today = friday; enum weekend {saturday = 10, sunday = 20};
  61. 61. Introduction to C programming 61 Structures • A struct can be used to ’combine variables’ • Fields can be accessed using a record selector (’.’) • Structs are passed ’by-value’ struct ComplexNumber { | struct Parameters { double real, imag; | struct ComplexNumber complex; }; | double value; | } param; struct ComplexNumber num; | num.real = 2.5; | param.complex.real = 3.6; num.imag = 0.3; | struct Parameters wow[5]; | wow[3].complex.real = 3.6;
  62. 62. Introduction to C programming 62 Unions • Look similar to structs but behave differently • All fields use a single memory location • Unions are passed ’by-value’ union MyUnion { | union Value { int i_value; | struct ComplexNumber complex; double d_value; | double normal; }; | }; | union MyUnion u; | union Value val; u.i_value = 6; | val.complex.real = 7.9; u.d_value = 5.4; | val.normal = 9.8;
  63. 63. Introduction to C programming 63 Defining Types • Using typedef new types can be defined • Syntax: typedef type name typedef char byte; byte b = 123; typedef struct ComplexNumber complex; complex var; var.real = 5.9; var.imag = 0.1;
  64. 64. Introduction to C programming 64 Functions (1) • In C, functions can be defined in three ways: int foo(void) { /∗ body ∗/ } void bar(int p1, double p0) { /∗ body ∗/ } double func(int p1, int p2, ...) { /∗ body ∗/ } • The last function has a variable number of parameters printf is an example of such a function
  65. 65. Introduction to C programming 65 Printf • printf is the standard print function in C. • Many types exist (fprintf, sprintf, etc.) • Syntax: int printf(const char ∗format, ...); • ’const char *format’ is the format string. • has variable number of parameters!!
  66. 66. Introduction to C programming 66 Printf Examples #include <stdio.h> | | int main(void) { | int val = 5; | Hello world char c = ’a’; | Hello 5 World char str[] = "world"; | 5 a World | Hello world printf("Hello worldn"); | printf("Hello %d Worldn", val); | printf("%d %c Worldn", val, c); | printf("Hello %sn", str); | return 0; | } |
  67. 67. Introduction to C programming 67 Printf (format string) %d signed int %u unsigned int %x hexadecimal unsigned int %c character %f double and float %s string %% to print a %
  68. 68. Introduction to C programming 68 Man pages • man pages give more information on C functions: man -S 3 printf PRINTF(3) Linux Programmer’s Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion etc.
  69. 69. Introduction to C programming 69 Function Prototypes (1) • A function must be defined before it can be used • This can be done using a function prototype void example(void) { int result = max(5, 8); /∗ ERROR ∗/ } int max(int one, int two) { return (one < two ? two : one); }
  70. 70. Introduction to C programming 70 Function Prototypes (1) • A function must be defined before it can be used • This can be done using a function prototype int max(int, int); /∗ prototype ∗/ void example(void) { int result = max(5, 8); /∗ OK ∗/ } int max(int one, int two) { return (one < two ? two : one); }
  71. 71. Introduction to C programming 71 Function Prototypes (2) • Sometimes useful to solve cyclic dependencies • Essential when applications are split into multiple files! must specify the prototype of functions in ’other’ files. • Problem: may get out of control.
  72. 72. Introduction to C programming 72 Function Prototypes (2) • Example: application split into 10 files each uses 4 functions from every other file. need 36 function prototypes per file! same for type definitions! • Solution: use header files and preprocessor requires 9 #include’s
  73. 73. Introduction to C programming 73 Header files • File that only contains type definitions function prototypes other preprocessor directives • Can be used ’export’ types and function from a C-file • Other files can then ’import’ the header using the #include preprocessor directive.
  74. 74. Introduction to C programming 74 Preprocessor (1) • Preprocessor is first step of compilation. • Compiling a file consists of three steps: 1. Preprocessor Processes all ’preprocessor directives’ 2. Compiler Translates the file to machine language (file.o) 3. Linker Combines binary files and libraries into executable
  75. 75. Introduction to C programming 75 Preprocessor (2) • Started automatically by the compiler (cpp). • Reads and reacts to preprocessor directives. commands starting with # comments (/* */) • output of preprocessor is then compiled
  76. 76. Introduction to C programming 76 Preprocessor (#include) • #include includes a header file • The header files will be copied into the program • Be very careful with repeating #includes! repeated type definitions not allowed! • Syntax: #include <filename> /∗ FOR ’GLOBAL’ INCLUDES ∗/ #include "filename" /∗ FOR ’LOCAL’ INCLUDES ∗/
  77. 77. Introduction to C programming 77 Preprocessor (#include Example) | int printf(const char ∗__format #include <stdio.h> −−−− > int sprintf(char ∗__s, const ch | /∗ ... + many other prototypes int main(void) { | printf("Hello worldn"); | void main(void) { return 0; | printf("Hello worldn"); } | return 0; | } |
  78. 78. Introduction to C programming 78 Header files (standard libs) • There are a large number of standard header files: stdio.h Input/output functions stdlib.h Some standard functions and macros math.h Mathematical functions stdarg.h Functions to use a variable number of parameters string.h Functions to manipulate strings time.h Functions related to time • have a look at ’/usr/include’ and ’/usr/lib’
  79. 79. Introduction to C programming 79 Preprocessor (#define) • #define defines constants #define LOOPS 100 | | void function(void) { | void function(void) { int i, j; | int i, j; for (i=0;i<LOOPS;i++) { | for (i=0;i<100;i++) { ... −−−− > .... } | } } | }
  80. 80. Introduction to C programming 80 Preprocessor (#ifdef en #if) • #ifdef and #if can be used to conditionaly compile #define DEBUG | #define TEST 0 | | void function(void) | { | void function(void) #ifdef DEBUG | { printf("firstn"); −−−− > printf("firstn"); #endif | } #if TEST | printf("secondn"); | #endif | } |
  81. 81. Introduction to C programming 81 Header files • Header files should always look like this: #ifndef SOME_UNIQUE_NAME #define SOME_UNIQUE_NAME /∗ type definitions go here ∗/ /∗ function prototypes go here ∗/ #endif /∗ SOME_UNIQUE_NAME ∗/
  82. 82. Introduction to C programming 82 Overview (1) • C is a procedural language suited for low-level software compiled not interpreted hardly anything is checked ∗ your program will crash if you make a mistake
  83. 83. Introduction to C programming 83 Overview (2) • Basic C syntax is similar to Java, but size of basic types is not fixed C has global variabeles no booleans, bytes or strings arrays behave differently also has enums, structs etc. • Preprocessor is not part of language, but frequently used.
  84. 84. Introduction to C programming 84 More info • Reader • Books The C Programming Language, by Kernighan and Ritchie • Man pages • Ask amazon or google
  85. 85. Introduction to C programming 85 Next week Pointers and Memory Management! jason@cs.vu.nl www.cs.vu.nl/~jason www.cs.vu.nl/~cn

×