Computer Programming. The greatest gift you can give another is the purity of your attention. Richard Moss

Similar documents
Outline. Computer programming. Debugging. What is it. Debugging. Hints. Debugging

Outline. Lecture 1 C primer What we will cover. If-statements and blocks in Python and C. Operators in Python and C

Lecture 07 Debugging Programs with GDB

C introduction: part 1

Topic 6: A Quick Intro To C. Reading. "goto Considered Harmful" History

Lecture 03 Bits, Bytes and Data Types

CSE 333 Midterm Exam July 24, Name UW ID#

Topic 6: A Quick Intro To C

CS 326 Operating Systems C Programming. Greg Benson Department of Computer Science University of San Francisco

Lecture 04 FUNCTIONS AND ARRAYS

CSE 333 Lecture 7 - final C details

CSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community

cs3157: another C lecture (mon-21-feb-2005) C pre-processor (3).

Functions in C C Programming and Software Tools. N.C. State Department of Computer Science

COMP26120: Algorithms and Imperative Programming. Lecture 5: Program structuring, Java vs. C, and common mistakes

Technical Questions. Q 1) What are the key features in C programming language?

JTSK Programming in C II C-Lab II. Lecture 3 & 4

CS3157: Advanced Programming. Outline

Basic C Programming. Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island

Slide Set 3. for ENCM 339 Fall Steve Norman, PhD, PEng. Electrical & Computer Engineering Schulich School of Engineering University of Calgary

Programs. Function main. C Refresher. CSCI 4061 Introduction to Operating Systems

BIL 104E Introduction to Scientific and Engineering Computing. Lecture 4

Lecture 04 FUNCTIONS AND ARRAYS

From Java to C. Thanks to Randal E. Bryant and David R. O'Hallaron (Carnegie-Mellon University) for providing the basis for these slides

C Functions. 5.2 Program Modules in C

Agenda. Peer Instruction Question 1. Peer Instruction Answer 1. Peer Instruction Question 2 6/22/2011

Pointers and scanf() Steven R. Bagley

Lecture 3. Review. CS 141 Lecture 3 By Ziad Kobti -Control Structures Examples -Built-in functions. Conditions: Loops: if( ) / else switch

CS 220: Introduction to Parallel Computing. Input/Output. Lecture 7

CSE 303: Concepts and Tools for Software Development

Rule 1-3: Use white space to break a function into paragraphs. Rule 1-5: Avoid very long statements. Use multiple shorter statements instead.

CSE 374 Programming Concepts & Tools

CSci 4061 Introduction to Operating Systems. Programs in C/Unix

2. Numbers In, Numbers Out

Chapter 11 Introduction to Programming in C

Computer Science & Information Technology (CS) Rank under AIR 100. Examination Oriented Theory, Practice Set Key concepts, Analysis & Summary

Tutorial 1: Introduction to C Computer Architecture and Systems Programming ( )

UNIT III (PART-II) & UNIT IV(PART-I)

BIL 104E Introduction to Scientific and Engineering Computing. Lecture 1

Applied Programming and Computer Science, DD2325/appcs15 PODF, Programmering och datalogi för fysiker, DA7011

Tutorial No. 2 - Solution (Overview of C)

Have examined process Creating program Have developed program Written in C Source code

2. Numbers In, Numbers Out

Programming in C First meeting

Modifiers. int foo(int x) { static int y=0; /* value of y is saved */ y = x + y + 7; /* across invocations of foo */ return y; }


Arrays and Pointers in C. Alan L. Cox

CSCI 171 Chapter Outlines

Basic C Programming (2) Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island

Programming in C week 1 meeting Tiina Niklander

C: Pointers, Arrays, and strings. Department of Computer Science College of Engineering Boise State University. August 25, /36

gcc hello.c a.out Hello, world gcc -o hello hello.c hello Hello, world

C for C++ Programmers

LAB #8. GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:

United States Naval Academy Electrical and Computer Engineering Department EC310-6 Week Midterm Spring AY2017

Chapter 11 Introduction to Programming in C

HW1 due Monday by 9:30am Assignment online, submission details to come

CS 220: Introduction to Parallel Computing. Beginning C. Lecture 2

Software Development With Emacs: The Edit-Compile-Debug Cycle

Computer Science & Engineering 150A Problem Solving Using Computers

Review of Scientific Programming in C and Fortran. Michael McLennan Software Architect HUBzero Platform for Scientific Collaboration

Lecture 04 Introduction to pointers

Lab 8. Follow along with your TA as they demo GDB. Make sure you understand all of the commands, how and when to use them.

Functions in C C Programming and Software Tools

CS113: Lecture 7. Topics: The C Preprocessor. I/O, Streams, Files

Computer Programming

Computer Science & Engineering 150A Problem Solving Using Computers. Chapter 3. Existing Information. Notes. Notes. Notes. Lecture 03 - Functions

C programming basics T3-1 -

CS113: Lecture 4. Topics: Functions. Function Activation Records

Functions. Prof. Indranil Sen Gupta. Dept. of Computer Science & Engg. Indian Institute t of Technology Kharagpur. Introduction

CSE101-lec#12. Designing Structured Programs Introduction to Functions. Created By: Amanpreet Kaur & Sanjeev Kumar SME (CSE) LPU

Oregon State University School of Electrical Engineering and Computer Science. CS 261 Recitation 2. Spring 2016

Deep C (and C++) by Olve Maudal

Lecture 12 CSE July Today we ll cover the things that you still don t know that you need to know in order to do the assignment.

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Slide Set 1. for ENCM 339 Fall Steve Norman, PhD, PEng. Electrical & Computer Engineering Schulich School of Engineering University of Calgary

CS61, Fall 2012 Section 2 Notes

CSE 230 Intermediate Programming in C and C++ Functions

Slide Set 3. for ENCM 339 Fall 2017 Section 01. Steve Norman, PhD, PEng

CS354 gdb Tutorial Written by Chris Feilbach

Fundamentals of Programming. Lecture 3: Introduction to C Programming

Programming in C First meeting Tiina Niklander

Procedures, Parameters, Values and Variables. Steven R. Bagley

Here's how you declare a function that returns a pointer to a character:

Exercise Session 2 Simon Gerber

CSE 333 Midterm Exam 7/29/13

QUIZ on Ch.5. Why is it sometimes not a good idea to place the private part of the interface in a header file?

Intermediate Programming, Spring 2017*

Deep C. Multifile projects Getting it running Data types Typecasting Memory management Pointers. CS-343 Operating Systems

Chapter 11 Introduction to Programming in C

Unit 7. Functions. Need of User Defined Functions

CS61C Machine Structures. Lecture 4 C Pointers and Arrays. 1/25/2006 John Wawrzynek. www-inst.eecs.berkeley.edu/~cs61c/

Debugging. ICS312 Machine-Level and Systems Programming. Henri Casanova

M.CS201 Programming language

CSC209H Lecture 3. Dan Zingaro. January 21, 2015

Chapter 11 Introduction to Programming in C

Lecture 2: C Programming Basic

Programming Language Basics

AN OVERVIEW OF C. CSE 130: Introduction to Programming in C Stony Brook University

ELEC 377 C Programming Tutorial. ELEC Operating Systems

Transcription:

Computer Programming The greatest gift you can give another is the purity of your attention. Richard Moss

Outline Modular programming Modularity Header file Code file Debugging Hints Examples T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 2

Modularity How do you solve a big/complex problem? Divide it into small tasks and solve each task. Then combine these solutions. Divide and Conquer T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 3

Advantages of using modules Modules can be written and tested separately Modules can be reused Large projects can be developed in parallel Reduces length of program, making it more readable Promotes the concept of abstraction A module hides details of a task We just need to know what this module does We don t need to know how it does it T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 4

Module Module: a collection of functions that perform related tasks. Example: a module could exist to handle database functions such as lookup, enter, and sort. Another module could handle complex numbers, and so on. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 5

Modules Modules are divided into two parts: public and private. Public part: Tells the user how to call the functions in the module. Contains the definition of data structures and functions that are to be used outside the module. These definitions are put in a header file, and the file must be included in any program that depends on that module. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 6

Modules Private part: Anything that is internal to the module is private. Everything that is not directly usable by the outside world should be kept private. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 7

Modular Programming in C Means splitting every source code into: a header file, e.g. module1.h and a corresponding code file, e.g. module1.c. The header contains only what client program are allowed to see and to use: declarations of constants, types, global variables and function prototypes Every other private item internal to the module must stay inside the code file. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 8

Header File Every header file should start with a brief description (as C comments) of: its purpose, author, copyright information, version and how to check for further updates. Proper C declarations must be enclosed between C preprocessor directives that prevent the same declarations from being parsed twice in the same compilation run T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 9

Header File. Skeleton example /* module1.h -- Skeleton example of a header file for a module Copyleft 2013 by Marius Joldos License: as you wish Author: Marius Joldos <Marius.Joldos@cs.utcluj.ro> Version: 2013-10-26 Updates: users.utcluj.ro/~jim/cp/modules.html */ #ifndef _MODULE1_H_ #define _MODULE1_H_ /* Include headers required by following declarations: */ #include <stdlib.h> #include <math.h> #include "otherheader.h" /* Constants declarations here. */ /* Types declarations here. */ /* Global variables declarations here. */ /* Function prototypes here. */ #endif T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 10

Code file The code module should include the required headers, then include its own header file. Including its own header, the compiler grabs all the constants, types and variables it requires. Including its own header file, the code file allocates and initialize the global variables declared in the header. Another useful effect of including the header is that prototypes are checked against the actual functions, so that for example if you forgot some argument in the prototype, or if you changed the code missing to update the header, then the compiler will detect the mismatch with a proper error message. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 11

Code file Macros, constants and types declared inside a code file cannot be exported, as them are implicitly always "private". static keyword Tells to the compiler that these functions are not available for linking, and then them will not be visible anymore once the code file has been compiled in its own object file. Global variables for internal use must have the static keyword in order to make them "private". Declare as static all the functions that are private to the code module. Private items are still available to the debugger, anyway. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 12

Code file /* module1.c -- See module1.h for copyright and info */ #include <malloc.h> #include <string.h> /* Including my own header: */ #include "module1.h" /* Private macros and constants: */ /* Private types: */ /* Private global variables: */ static module1_node * spare_nodes = NULL; static int allocated_total_size = 0; /* Private functions: */ static int *example1_opaque(void){... } static void example2_opaque(module1_opaque * p){... } /* Public functions: */ void module1_init(void){... } module1_node * module1_add(char * key){... } void module1_free(void){... } T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 13

Main Program Main program The name of our project will be programname and its source file is programname.c (or main.c). This source is the only one that does not require an header file, and it contains the only public function, main(), that does not have a prototype. The main source includes and initializes all the required modules, and finally terminates them once the program is finished. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 14

Main Program /* program_name.c -- Our sample program Copyleft 2013 by Marius Joldos License: as you wish Author: Marius Joldos <Marius.Joldos@cs.utcluj.ro> Version: 2013-10-26 Updates: users.utcluj.ro/~jim/cp/modules.html */ /* Include standard headers: */ #include <stdio.h> #include <string.h> #include <stdlib.h> T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 15

Main Program /* Include our modules headers: */ #include "module1.h" #include "module2.h" #include "module3.h" int main(int argc, char *argv[]) { /* Initialize modules: */ module1_init(); module2_init(); /* Perform our job. */ /* Properly terminate the modules, if required: */ module2_free(); module1_free(); return 0; } T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 16

Example Demo and discussion of example T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 17

Debugging. What is it Debugging is not getting the compiler to compile your code without syntax errors or linking errors. Although this can sometimes take some time when a language is unfamiliar. Debugging is what you do when your code compiles, but it doesn t run the way you expected. Why doesn t it work? What do I do now? T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 18

Debugging. Hints To solve a problem, you must understand it. Make life easier for yourself: Indent your code properly (observe style rules). Use meaningful variable names. Print debugging to stderr or stdout, but not both, or your debugging output may be reordered. Develop incrementally. Test as you go. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 19

Debugging. Make compiler help you The C compiler isn t as pedantic as a Java compiler, but it can still help you out. Use the compiler flags. With gcc: -g includes debugging systems -Wall turns on (almost) all compiler warnings. Use the help system. Use Web resources on Dev-Cpp, CodeBlocks adjust help menu Web links T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 20

Debugging. CodeBlocks. Make compiler help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 21

Debugging. CodeBlocks. Make compiler help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 22

Debugging. CodeBlocks. Make compiler help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 23

Debugging. CodeBlocks. Make compiler help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 24

Debugging. CodeBlocks. Make IDE help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 25

Debugging. CodeBlocks. Make IDE help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 26

Debugging. CodeBlocks. Make IDE help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 27

Debugging. CodeBlocks. Make IDE help you T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 28

Useful Web links The C book: http://publications.gbdirect.co.uk/c_book/ C programming http://www.eskimo.com/~scs/cclass/cclass.html How to debug programs http://www.drpaulcarter.com/cs/debug.php Common C programming errors http://www.drpaulcarter.com/cs/common-cerrors.php T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 29

Debugging. Hints When it doesn t work, pause, read the output very carefully, read your code, and think first. It is way too easy to start hacking, without reviewing the evidence that s in front of your nose. If there is not enough evidence to find and understand a problem, you need to gather more evidence. This is the key to debugging. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 30

Debugging. Gathering evidence Two ways to fail: 1. Program did something different from what you expected. 2. Program crashed. In C, likely symptoms of a crash: Segmentation fault: core dumped. Bus error: core dumped. Floating point exception: core dumped. We ll deal with crashes a little later. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 31

Debugging. Gathering evidence Program did something different from what you expected. Task 1: figure out what the program did do. Task 2: figure out how to make it do what you wanted it to do. Don t jump in to task 2 before doing task 1. You ll probably break something else, and still not fix the bug. And there may be similar bugs elsewhere in your code because you made the same error more than once. Don t jump into the debugger first - it stops you reading your code. A debugger is only one debugging tool. Occasionally code behaves differently in a debugger. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 32

Debugging. Gathering evidence Did the program take the path through your code that you expected? How do you know? Annotate the expected code path. printf( here 7\n ); printf( entering factorial()\n ); printf( leaving factorial()\n ); It s very common for your program to take a different path. Often when you see this, the bug will be obvious. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 33

Debugging. Gathering evidence Print the values of key variables. What are you looking for? Did you initialize them? C won t usually notice if you didn t. Were type conversions done correctly? Did you pass the parameters in the wrong order? Print out the parameters as they were received in the function. Did you pass the right number of parameters? C won t always notice. Did some memory get overwritten? A variable spontaneously changes value! T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 34

Common C Errors Missing break in a switch statement Using = instead of == if (a = 0) {... } Spurious semicolon: while (x < 10); x++; Missing parameters: printf("the value of a is %d\n"); Wrong parameter type in printf, scanf, etc: double num; printf("the value of n is %d\n", num); T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 35

Common C Errors Array indexing: int a[10]; has indices from 0 to 9 Comparing Strings: char s1[] = "test"; char *s2 = "test"; if (s1 == s2) printf( Equal\n ); You must use strcmp() or strncmp() to compare strings. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 36

Common C Errors Integer division: double half = 1/2; This sets half to 0 not 0.5! 1 and 2 are integer constants. At least one needs to be floating point: double half = 1.0/2; Or cast one to floating point: int a = 1, b = 2; double half = ((double)1)/2. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 37

Common C Errors Missing headers or prototypes: double x = sqrt(2); sqrt is a standard function defined in the maths library. It won t work properly if you forget to include math.h which defines the function prototype: double sqrt(double) C assumes a function returns an int if it doesn t know better. Link with lm may be necessary T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 38

Common C Errors Spurious pointers: char *buffer; fgets(buffer, 80, stdin); With pointers, always ask yourself : Which memory is this pointer pointing to?. If it s not pointing anywhere, then assign it the value NULL (0) If your code allows a pointer to be NULL, you must check for this before following the pointer. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 39

Crashes. Core files Segmentation fault: core dumped. The program tried to access memory that did not belong to it. The error was detected by the OS. Bus error: core dumped. The program tried to access memory that did not belong to it. The error was detected by the CPU. Floating point exception: core dumped. The CPU s floating point unit trapped an error. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 40

CodeBlocks Running program ends with execution error. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 41

CodeBlocks. Run program under debugger T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 42

CodeBlocks. Run program under debugger T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 43

Debugging Tips (Philip Guo) Use print statements (with endlines) to hone in on a problem, then switch into a debugger Write complex conditional breakpoint conditions in your source code. E.g. void foo(int a, int b, int c) {... if (((a % 3) == 0) ((b < (c * 2)) && ((c + a) < 0))) { printf("break!!!"); }... } Debug memory corruption errors using watchpoints Memory corruption can occur when some data structure in your program retains a pointer to a region of memory that is freed without its knowledge (via an aliased pointer), and then some other part of your program re-allocates that memory to be used for another purpose T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 44

What is wrong here? #include <stdio.h> #include <stdlib.h> main() { int numbers[10]; int i; for (i=1;i<=10;i++) numbers[i]=i; for (i=1;i<=10;i++) printf("numbers[%d]=%d\n", i, numbers[i]); } #include <stdio.h> #include <stdlib.h> main() { int i; for (i=0; i<10; i=i+1) if (i=2) printf("i is 2\n"); } else printf("i is not 2\n"); T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 45

What is wrong? #include <stdio.h> #include <stdlib.h> main() { int i; for (i=0; i<10; i=i+1) if (i<2) printf("%d is less than 2\n",i); printf("and %d is not equal to, 2 either\n",i); } #include <stdio.h> #include <stdlib.h> main() { int i; i = 0; while (i < 10); i = i + 1; printf("finished. i = %d\n",i); } T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 46

What is wrong? #include <stdio.h> #include <stdlib.h> main() { int i; for (i=0; i<10; i=i+1) switch(i){ } case 0: printf("i is 0\n"); case 1: printf("i is 1\n"); default: printf("i is more than 1\n"); } #include <stdio.h> int main(int argc, char *argv[]) { int i = 0; char buff[128]; char *arg1 = argv[1]; } while (arg1[i]!= '\0' ) { buff[i] = arg1[i]; i++; } buff[i] = '\0'; printf("buff = %s\n", buff); T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 47

Common Programming Errors in the C Language (Microsoft KB22321) Using an automatic variable that has not been initialized Omitting a closing comment delimiter Using an array index greater than the length of the array (In C, array indexes run from zero to <length>- 1.) Omitting a semicolon or a closing brace Using an uninitialized pointer Using a forward slash when a backslash is required (for example, substituting "/n" for "\n.") Using "=" in a comparison where "==" is desired Overwriting the null terminator for a string Prematurely terminating a function declaration with a semicolon (The compiler often flags the "orphan" block of code as a syntax error.) Specifying the values of variables in a scanf() statement instead of their addresses Failing to declare the return type for a function Assuming an expression evaluation order when using an expression with side effects (For example, a[i] = i++; is ambiguous and dangerous.) Failing to account that a static variable in a function is initialized only once Omitting a "break" from a case in a switch statement (Execution "falls through" to subsequent cases.) Using "break" to exit a block of code associated with an if statement (The break statement exits a block of code associated with a for, switch, or while statement.) Comparing a "char" variable against EOF (-1). T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 48

Questions to answer (M. R. Murphy ) Is the argument count correct? Is the spelling correct? Is the argument type correct? Is the variable initialized correctly? Do "ends" match "do"s? Is the correct register used? Is a previous equate, using, or define in effect? Is the level of indirectness correct? Are the defaults correct? Is the array large enough to hold the data? Is the index out of range? Is reentrancy, reusability, refreshability preserved? Did you let something go by that you can't explain? Fix it now. Does the program have anything remotely to do with the requirement for the program? Did you start to code before thinking? Did you read the manual? T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 49

Advice from Andy Oram and Greg Wilson "Beautiful Code" The general process for finding causes is called the scientific method. Applied to program failures, it works as follows: Observe a program failure. Invent a hypothesis for the failure cause that is consistent with the observations. Use the hypothesis to make predictions. Put your predictions to the test by experiments and further observations: If experiment and observation satisfy the prediction, refine the hypothesis. If not, find an alternate hypothesis. Repeat steps 3 and 4 until the hypothesis can no longer be refined. T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 50

Info sources (web) C Programming Techniques Debugging with Code::Blocks - CodeBlocks Debugging in Code::Blocks YouTube How to use Debug in Code::Blocks - YouTube T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 51

Summary Modular programming Modularity Header file Code file Debugging Hints Examples T.U. Cluj-Napoca - Computer Programming - lecture 5 - M. Joldoş 52