# Compilation Pipeline

## Lab Exercises

The primary goal of this lab period is to get your C compiler up and running.

We have 2 “Hello, World!” examples for you to practice compiling to make sure that everything is working.

Lab 1 files (ZIP) (This ZIP file contains: 3 .c files and 1 .h file.)

Compile hello1 with:

gcc hello.c -o hello1

Compile hello2 with:

gcc main.c hello.c -o hello2

## Assignment 1

### Setup

Assignment 1 files (ZIP) (This ZIP file contains: 3 .c files and 2 .h files.)

The zip contains 3 C files:

1. fibeverse.c
2. fibonacci.c
3. reverse.c

1. fibonacci.h
2. reverse.h

You can compile them with this command (though it won’t work at first; see Problem 1):

gcc -Wall -std=c99 _fibeverse.c reverse.c fibonacci.c_ -o **fibeverse**

You can run the resulting program with two arguments: a number, then a string (in quotes):

./fibeverse 6 'what a trip that was!'  8  was! that trip a what


The first line it prints is the 6th fibonacci number. The second line is the string you provided, with the words reversed.

### Problem 1

Unfortunately, the code doesn’t compile as-is! Fix the compile errors and warnings. gcc should produce no output with the above command when you are done.

### Problem 2

I can’t decide whether I want a program that computes Fibonacci numbers or a program that reverses strings! Let’s modify fibeverse so that it can be compiled into either.

Use the preprocessor macros we taught in class to make it so that I can choose which program it is at compile time.

When I compile it with this command, it should compute the Fibonacci number but not reverse the second argument:

gcc -Wall -std=c99 **-DFIBONACCI** fibeverse.c reverse.c fibonacci.c -o **fibonacci**

Then I can run it like this:

./fibonacci 8

When I use this command, it should reverse the string I provide as the first argument, and not do any fibonacci calculation:

gcc -Wall -std=c99 **-DREVERSE** fibeverse.c reverse.c fibonacci.c -o **reverse**

Then I can run it like this:

./reverse 'a brave new world'

It should work as it originally did when I provide both compiler flags:

gcc -Wall -std=c99 **-DFIBONACCI -DREVERSE** fibeverse.c reverse.c fibonacci.c -o **fibeverse**

### Solutions

#### Learning Resource Types

assignment Problem Sets
notes Lecture Notes
group_work Projects
assignment_turned_in Programming Assignments with Examples