Download presentation
Presentation is loading. Please wait.
Published byJasper White Modified over 9 years ago
1
(language, compilation and debugging) David 09/16/2011
2
Content C language overview Compilation debugging
3
Basic data type Integer int, short, long, long long and unsigned Char a byte has the same number of bits of char _Bool Integer with 1 bit in memory Floating point float, double, and long double
4
Other data type Pointer type *p; store the address of memory location array type name[dim]; struct struct ex{ int a; char b;}; const int * const p; /*a const pointer to a int*/ const int * p; /*a pointer to a const int*/
5
Statement conditionals if switch-case loops while (do-while) while(1){} for break/continue change the flow of execution
6
Functions functions written by yourself return-type function-name ( argument-list-if-necessary ) {...local-declarations......statements... return return-value; } library functions include header files in your code libraries stdio.h string.h stdlib.h
7
Example - 1 int max(int a, int b) { if(a > b) return a; else return b; } int factorial(int a) { int ret = 1; if(a < 0) return -1; while(a > 0) ret *= a--; return ret; } If and while statements
8
Example - 2 int even_sum (int m) { int sum = 0; while (m > 0) { switch (m%2) { case 1: m--; break; case 0: sum += m--; } return sum; } switch statement
9
Example - 3 float thres_sum(float *array, int size, float thres){ int i; float sum = 0; for(i = 0; i < size; i++) { if(array[i] <= thres) continue; else sum += array[i]; } return sum; } for statement and pointer
10
Example - 4 #define PI 3.1415926 typedef struct cylinder Cy; Cy max_volumn (Cy cy1, Cy cy2) { float vol1, vol2; vol1 = PI * cy1.r * cy1.r * cy1.H; vol2 = PI * cy2.r * cy2.r * cy2.H; if(vol1 > vol2) return cy1; else return cy2; } Struct and typedef struct cylinder { float r; float H; };
11
Recursive function call a function that contains a call to itself. Divide complex problem into identical simple cases. Must have at least one exit condition that can be satisfied. i.e. Towers of Hanoi int factorial (int n) { if(n == 1) return 1; else return n * factorial(n-1); }
12
Pass by value vs. pass by address How are parameters passed to a function? pass by value: make a copy of the variable Simple Can not change the passed variable pass by address: address of the variable is passed Efficient Can change the variable, though the address of the variable is not changed
13
void swap1(int a, int b) { int c; c = b; b = a; a = c; } void swap2(int *a, int *b) { int c; c = *b; *b = *a; *a = c; } Example - 5 Pass by value and pass by reference
14
int main() { int a = 3, b = 5; swap1(a,b); printf(“a is %d, b is %d\n”, a, b); swap2(&a, &b); printf(“a is %d, b is %d\n”, a, b); return 0; } Example - 5 (continued) Pass by value and pass by reference
15
Dynamic memory allocation Typical variable definition (known size) Statically defined in program Allocated in the stack i.e., int a[10] Define a variable that has a varying size? Allocated at run-time, in the heap Use malloc() function call to allocate Use free(*pointer) to free the memory of a variable
16
int main() { int *array, i, size; printf(“Input the array size:”); scanf(“%d”, &size); array = (int *)malloc(size, sizeof(int)); for(i=0; i < size; i++) array[i] = i; free(array); //otherwise, memory leak return 0; } Example - 6 Dynamic memory allocation
17
Preprocessing directives #define Defines a macro. #include Inserts text from another source file. #ifdef Conditionally includes source text if a macro name is defined. #ifndef Conditionally includes source text if a macro name is not defined. #ifndef FILENAME_H #define FILENAME_H … #endif #else Conditionally includes source text if the previous #ifdef, #ifndef test fails. #endif Ends conditional text.
18
I/O capability FILE *fp; fp = fopen(name, mode); fclose(fp); fprintf(fp, "format string", variable list); fgets(str_name, length, fp); feof(fp); while(!feof(fp)) { fgets(line, max_length, fp); … }
19
Example - 7 int print_triangle(char style, int base, char *filename) { int i,j; FILE *fp = fopen(filename, “w+”); // open file if(fp == NULL) return -1; if(lines % 2 == 0) base--; for(i = 1; i <= base; i=i+2) { for(j = 0; j < (base – 1) / 2; j++) fprintf(fp, ‘ ‘); for(j = 0; j < i; j++) fprintf(fp, “%c”,style); fprintf(fp, “\n”); } fclose(fp); return 0; } * *** ***** ******* ********** File operations
20
Command-line arguments main(int argc, char** argv) a.out -i 2 -g -x 3 argc = 6 argv[0] = "a.out" argv[1] = "-i" argv[2] = "2" argv[3] = "-g" argv[4] = "-x" argv[5] = "3"
21
Compilation gcc codename –o programname make prog = cc –o prog prog.c options -o filename -g produce extra debugging information -O(0/1/2/3) optimization level -I(i)directory add header file directory -l(L)libraryname link the library
22
Example - 8 #include int main() { double s3 = sqrt(3); printf(“Square root of 3 is:%lf\n”, s3); return 0; } Library Usage Source code: example.c Compilation gcc –g –o example example.c –lm
23
Makefile Multiple files compilation files main.c factorial.c hello.c Run make #Makefile_example all: hello hello: main.o factorial.o hello.o gcc main.o factorial.o hello.o -o hello main.o: main.c gcc -c main.c factorial.o: factorial.c gcc -c factorial.c hello.o: hello.c gcc -c hello.c clean: rm -rf *o hello
24
Another makefile CC=gcc CFLAGS=-c -Wall SOURCES=main.c hello.c factorial.c OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(OBJECTS) -o $@.c.o: $(CC) $(CFLAGS) $< -o $@ http://mrbook.org/tutorials/make/
25
Common compilation errors Typos (C language is case sensitive) Try to use a variable without definition Some statements are not ended by ; Brackets are not paired ( ), { }, [ ] Number or type of parameters passed to a function does not match the function definition. Still have errors? copy the error message, Google it.
26
gdb for debugging -g in compilation to enable gdb gdb obj //start gdb with obj program (gdb) run (arg ) (gdb) s for step execution (gdb) p for print variables (gdb) br to set breakpoint (gdb) set to modify registers or memory set $eax=10 (gdb) help
27
Most powerful debug tool printf function print out check points near vulnerable codes to trace down where bug appears i.e, File operation, control statements... print out value of variables to trace down when bug happens i.e. invalid array operation, loop does not stop, and etc.
28
For more information http://www.ic.sunysb.edu/Stu/xdeng/c.htm http://www.ic.sunysb.edu/Stu/xdeng/c.htm Email: davidgdw@gmail.comdavidgdw@gmail.com Google
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.