300 likes | 509 Vues
C/C++ Basics. Basic Concepts. Basic functions of each language: Input, output, math, decision, repetition Types of errors: Syntax errors, logic errors, runtime errors. Debugging Machine language, assembly language, high level languages. Procedural Programming. Data Element. Procedure B.
E N D
Basic Concepts • Basic functions of each language: Input, output, math, decision, repetition • Types of errors: Syntax errors, logic errors, runtime errors. • Debugging • Machine language, assembly language, high level languages
Procedural Programming Data Element Procedure B Procedure A
Procedural languages … • Global variables • Primitive data types, Arrays, Records/Structures • lots of functions/procedures/modules • Uniqueness of “names” requirement Struct + protection + methods ~= class (OOP)
SW Complexity reality SW Complexity Size of the application – Lines of Code
SW complexity? • Lots of lines in code – hard to understand • Not many meaningful comments • Too many variables – not named well • Complex functions – too nested, too lengthy, too many if conditions • Inter-dependancies – changes that have to be done together in multiple files • When you fix a bug, you make a few more.
SW Complexity SW Complexity ideal Size of the application – Lines of Code
Object-Oriented Programming Programming Interface Other objects Object Attributes (data)typically private to this object Methods(behaviors / procedures)
C vs. C++ • C++ is backward compatible with C • C++ supports OOP • C++ standard library contains lot more functionality • Improved I/O mechanism • Lot of new header files • C is very efficient, C++ is close too. • …
C++ vs. Java: Similarities • Both support OOP. Most OOP library contents are similar, however Java continues to grow. • Syntax is very close – Java has strong influence of C/C++. Easy to learn the other language when you know one of these.
C standard library • http://en.wikipedia.org/wiki/C_standard_library • stdio.h: scanf(), printf(), getchar(), putchar(), gets(), puts(), … • stdlib.h: atof(), atoi(), rand(), srand(), malloc(), free(), … • math.h: sin(), cos(), sqrt(), … • string.h: strcpy(), strcmp(), … • ctype: isdigit(), isalpha(), tolower(), toupper() • …
Sample C programs: prog1.cThese are in ~veerasam/students/basics #include <stdio.h> main() { int in1, out; double in2; puts("Enter values:"); scanf("%d%lf", &in1, &in2); // & means "address of" // %d int, %f float, %lf double out = in1 + in2; printf("Output is %d\n", out); }
Sample C programs: prog2.c #include <stdio.h> #include <stdlib.h> main() { char line[10]; int out; gets(line); puts(line); out = 2 * atoi(line); printf("%d\n", out); }
Sample C programs: prog3.c #include <stdio.h> #include <stdlib.h> main() { srand(getpid()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); }
Sample C programs: prog4.c #include <stdio.h> int add(int x, int y) { return x + y; } main() { int in1, in2, out; puts("Enter values:"); scanf("%d%d", &in1, &in2); out = add(in1, in2); printf("Output is %d\n", out); }
Sample C programs: simple.c #include <stdio.h> main() { int i, arr[10]; puts("Let me init the array contents."); for( i=0 ; i<20 ; i++) arr[i] = i; puts("Well, I survived!"); return 0; }
Sample C programs: simple.c #include <stdio.h> main() { int i, arr[10]; puts("Let me init the array contents."); for( i=0 ; i<20 ; i++) arr[i] = i; puts("Well, I survived!"); return 0; }
Sample C programs: simple2.c main() { puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); puts("Let me init array contents."); for( i=-10 ; i<20 ; i++) array[i] = i; puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); puts("\nWell, I survived!"); return 0; } #include <stdio.h> int i, array[10], array2[10]; printArray(int *arr) { int i; for(i=0 ; i<10 ; i++) printf("%d\n",arr[i]); }
Sample C programs: simple1.c #include <stdio.h> int i, array[10], array2[10]; main() { puts("\nArray's contents are"); for( i=0 ; i<10 ; i++) printf("%d\n",array[i]); puts("\nArray2's contents are"); for( i=0 ; i<10 ; i++) printf("%d\n",array2[i]); puts("Let me init the array contents."); for( i=-10 ; i<20 ; i++) array[i] = i; puts("\nArray's contents are"); for( i=0 ; i<10 ; i++) printf("%d\n",array[i]); puts("\nArray2's contents are"); for( i=0 ; i<10 ; i++) printf("%d\n",array2[i]); puts("\nWell, I survived!"); return 0; }
Sample C programs: simple3.c main() { int i, array[10], array2[10]; puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); puts("Let me init array contents."); for( i=-10 ; i<20 ; i++) array[i] = i; puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); puts("\nWell, I survived!"); return 0; } #include <stdio.h> printArray(int *arr) { int i; for(i=0 ; i<10 ; i++) printf("%d\n",arr[i]); }
Sample C programs: simple4.c second() { int i, array[10], array2[10]; puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); puts("Let me init array contents."); for( i=-10 ; i<20 ; i++) array[i] = i; puts("\nArray's contents are"); printArray(array); puts("\nArray2's contents are"); printArray(array2); } #include <stdio.h> printArray(int *arr) { int i; for(i=0 ; i<10 ; i++) printf("%d\n",arr[i]); } main() { second(); puts("\nWell, I survived!"); return 0; }
Things to observe • Memory allocation for arrays • Array length is not stored with arrays • Potentional issues with scanf() and printf() • Different behavior when overshooting arrays in heap vs. in stack
Compare with Java file1.java file3.java filen.java file2.java …
C files & runtime environment file1.c file3.c filen.c file2.c …
Debugging : gdb Compile with –g option to use the debugger. Most used commands: • run • list [method name] • break [line_number] • step • next • continue • print [variable]