Computer Science 210 Computer Organization

Slides:



Advertisements
Similar presentations
Compilation and Debugging 101. Compilation in C/C++ hello.c Preprocessor Compiler stdio.h tmpXQ.i (C code) hello.o (object file)
Advertisements

Makefiles. makefiles Problem: You are working on one part of a large programming project (e. g., MS Word).  It consists of hundreds of individual.c files.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 12 Separate Compilation Namespaces Simple Make Files (Ignore all class references.
1 CS 201 Makefile Debzani Deb. 2 Remember this? 3 What is a Makefile? A Makefile is a collection of instructions that is used to compile your program.
Software Development CS240 Dick Steflik. Make “make” is a software engineering tool for managing and maintaining computer programs  Help minimize the.
Engineering H192 - Computer Programming The Ohio State University Gateway Engineering Education Coalition Lect 17P. 1Winter Quarter Personal Libraries.
Guide To UNIX Using Linux Third Edition
 2000 Prentice Hall, Inc. All rights reserved. Chapter 13 - The Preprocessor Outline 13.1Introduction 13.2The #include Preprocessor Directive 13.3The.
Computer Science 210 Computer Organization Modular Decomposition Making a Library Separate Compilation.
The Preprocessor #include #define N 10 C program Preprocessor Modified C program Preprocessor Object codes.
Computer Science 210 Computer Organization Introduction to C.
CS162B: Assembly and C Jacob T. Chan. Objectives ▪ System calls ▪ Relation of System calls to Assembly and C ▪ Special System Calls (exit, write, print,
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
Programming With C.
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
Computer Science 210 Computer Organization Building an Assembler Part IV: The Second Pass, Syntax Analysis, and Code Generation.
C Tutorial - Program Organization CS Introduction to Operating Systems.
Algorithms  Problem: Write pseudocode for a program that keeps asking the user to input integers until the user enters zero, and then determines and outputs.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Preprocessing Lecture 12 April 7, 2005.
Makefiles. Multiple Source Files (1) u Obviously, large programs are not going to be contained within single files. u C provides several techniques to.
CPS120: Introduction to Computer Science Compiling a C++ Program From The Command Line.
COP 3530 Spring2012 Data Structures & Algorithms Discussion Session Week 2.
C code organization CSE 2451 Rong Shi. Topics C code organization Linking Header files Makefiles.
Chapter 3 Part II. 3.8 Placing a Class in a Separate File for Reusability.cpp file is known as a source-code file. Header files ◦ Separate files in which.
L071 Introduction to C Topics Compilation Using the gcc Compiler The Anatomy of a C Program Reading Sections
Recursion ● Recursion is a computer programming technique that allows programmers to divide problems into smaller problems of the same type. ● You can.
Lecture 3 Translation.
Introduction to C Topics Compilation Using the gcc Compiler
Prof: Dr. Shu-Ching Chen TA: Hsin-Yu Ha Fall 2015
User-Written Functions
Function: Declaration
Computer Science 210 Computer Organization
Computer Science 210 Computer Organization
Computer Science 210 Computer Organization
Computer Science 210 Computer Organization
CS 153: Concepts of Compiler Design August 29 Class Meeting
Compiler Construction (CS-636)
Chapter 6 Modular Programming Dr. J.-Y. Pan Dept. Comm. Eng.
Chapter 13 - The Preprocessor
Makefiles Caryl Rahn.
Algorithms Problem: Write pseudocode for a program that keeps asking the user to input integers until the user enters zero, and then determines and outputs.
SCMP Special Topic: Software Development Spring 2017 James Skon
Introduction to C Topics Compilation Using the gcc Compiler
CS1010 Programming Methodology
Introduction to C Topics Compilation Using the gcc Compiler
Computer Science 210 Computer Organization
C Basics.
CS1010 Programming Methodology
Choice of Programming Language
Larger Projects, Object Files, Prototyping, Header Files, Make Files
Makefile Tutorial CIS5027 Prof: Dr. Shu-Ching Chen
Prof: Dr. Shu-Ching Chen TA: Yimin Yang
Prof: Dr. Shu-Ching Chen TA: Samira Pouyanfar Hector Cen Fall 2017
Computer Science 210 Computer Organization
Computer Science 210 Computer Organization
Prof: Dr. Shu-Ching Chen TA: Hsin-Yu Ha
Computer Science 210 Computer Organization
Computer Science 210 Computer Organization
C Preprocessor(CPP).
Govt. Polytechnic,Dhangar
SCMP Software Development Spring 2018 James Skon
Writing Large Programs
Appendix F C Programming Environment on UNIX Systems
Main() { int fact; fact = Factorial(4); } main fact.
10/6: Lecture Topics C Brainteaser More on Procedure Call
Introduction to C Topics Compilation Using the gcc Compiler
SCMP Software Development Spring 2018 James Skon
Chapter 11 Introduction to Programming in C
CMPE 152: Compiler Design August 27 Class Meeting
Presentation transcript:

Computer Science 210 Computer Organization Modular Decomposition Making a Library Separate Compilation

Program Decomposition C programs consist of lots of functions Organize these and save them in libraries (like Python modules) Separately compile them for distribution and link them to client applications

Example: An Assembler Text file Object file Sym file Source program listing, error messages (file and/or terminal)

Decompose into Modules Text file Character stream CharacterIO Scanner Tools Token stream Symbol table Parser Opcode table Source program listing, error messages (file and/or terminal) Sym file Object file CharacterIO – handles files, text Scanner – recognizes numbers, symbols, assembler directives Parser – handles syntax checking, code generation

Using a Function Prototype /* This program prints the factorial of 6. */ #include <stdio.h> int factorial(int n); // Prototype shows the function specs int main(){ printf("The factorial of 6 is %d\n", factorial(6)); } int factorial(int n){ if (n == 1) return 1; else return n * factorial(n - 1); A function prototype is a header that appears early, to aid the human reader of the code (like a Java interface, sort of)

Where Should Functions Go? We can put ‘em all in one file with the application; prototypes are at the beginning of the file, and we work top down But this requires recompiling the whole file after one small change Work can’t be divided among many developers Functions can’t be maintained independently of their clients

Create a Library of Functions Place the function prototypes for a module in a header file (.h extension) Place the completed function definitions for that module in an implementation file (.c extension) Compile the c. file, link it to a test driver, test it, and store it away Example: a mylib library with factorial and gcd

Structure of the Program Header file Main function file mylib.h usemylib.c Compile time Compile time Link time Implementation file mylib.c mylib.c and usemylib.c can be compiled in separate steps, by different people, in different organizations They each rely on the interface in mylib.h

The Header File mylib.h /* File: mylib.h Header file for factorial and gcd functions. */ // Returns the factorial of n int factorial(int n); // Returns the greatest common divisor of a and b int gcd(int a, int b); The header file contains function prototypes and may also contain #define macros

The Implementation File mylib.c Implementation file for factorial and gcd functions. */ #include "mylib.h" // Returns the factorial of n int factorial(int n){ if (n == 1) return 1; else return n * factorial(n - 1); } // Returns the greatest common divisor of a and b int gcd(int a, int b){ if (b == 0) return a; return gcd(b, a % b); The implementation file also includes its header file (for consistency checking) – note the quotes rather than the < >

The Test Driver File usemylib.c Test program uses both mylib functions. */ #include <stdio.h> #include "mylib.h" int main(){ printf("The factorial of 6 is %d\n", factorial(6)); printf("The gcd of 9 and 15 is %d\n", gcd(15, 9)); }

Separate Compilation and Linking Save each implementation file with a .c extension Work bottom up, compile each .c file with gcc –c <filename>.c If no errors, link the object files with gcc –o <main filename> <filename>.o ... <filename>.o If no errors, run the program with ./<main filename>

make and Makefiles Many modules to keep track of Which ones are up to date, which ones need to be recompiled? The UNIX make tool and makefiles help to manage this problem

make and Makefiles When you run make, UNIX looks for a file named makefile or Makefile in the current working directory A makefile contains info about the dependencies among program modules and commands to compile and/or link them

Makefile Entries This is the format of an entry. There are one or more entries in a makefile. targets : prerequisites commands A tab must go here Targets are dependent on prerequisites Targets and prerequisites are file names Commands are similar to those we’ve seen already

A Makefile for Compiling mylib mylib.o : mylib.c mylib.h gcc -c mylib.c prerequisites target command

Add Another Entry for usemylib usemylib.o : usemylib.c mylib.h gcc -c usemylib.c mylib.o : mylib.c mylib.h gcc -c mylib.c

Add Another Entry to Link the Program usemylib : usemylib.o mylib.o gcc -o usemylib usemylib.o mylib.o usemylib.o : usemylib.c mylib.h gcc -c usemylib.c mylib.o : mylib.c mylib.h gcc -c mylib.c

Add comments if you like # Here’s a makefile comment (looks like # a Python comment!) usemylib : usemylib.o mylib.o gcc -o usemylib usemylib.o mylib.o usemylib.o : usemylib.c mylib.h gcc -c usemylib.c mylib.o : mylib.c mylib.h gcc -c mylib.c

How make works > make > make mylib.o The first call compares the time stamps of the targets and prerequisites and runs only those commands that “make” the targets up to date The second call runs only the command whose target is the argument mylib.o

For Wednesday Arrays and Pointers