---
title: Eboard 09  Macros and the C Preprocessor
number: 9
section: eboards
held: 2017-04-06
---
CSC 282.01, Class 09:  Macros and the C Preprocessor
====================================================

_Overview_

* Preliminaries
    * Notes and news
    * Upcoming work
    * Questions
* Reminder: The C Preprocessor
* Including files
* Constants
* Command-line options
* Macros
* CPP conditionals
* Detour: Standard header file format

### News / Etc.

* Good morning!  Welcome back from break!
* Thanks for your hard work on the API API!
* You should be able to find the code we develop in today's class 
  in the repo called [intro-macros-2017S](https://github.com/Grinnell-CSC282/intro-macros-2017S).

### Upcoming work

* TBD

### Good things to do

* BAX opening reception tomorrow!
* Baseball Saturday, Womens' Tennis Saturday, ...

### Questions

Reminder: The C Preprocessor
----------------------------

* First phase of compilation 
* Compilation is (turn "human"-readable into computer readable)
* First phase: Textual manipulation of program.
    * Include files
    * Replaces the definiens with the definition (from `#DEFINE`)
    * Conditionally does stuff
    * Strips comments

Including files
---------------

`#include "filename"` includes local file
`#include <filename>` includes file in the include path

Constants
---------

`#define NAME VALUE`

Command-line flags
------------------

`-DNAME=VALUE`

Macros
------

Also defined with `#DEFINE`.  Are kind of like procedures.  They take
parameters, they have a body.

```
#define TWICE(X) X+X
```

vs.

```
int
twice (int x)
{
  return x+x;
}
```

Remind: C preprocessor does textual substitution.  The input type to
`TWICE` is "program text" and the output type is "program text".

Why would we use the macro rather than the procedure (in this situation)?
  : More general.  The macro can work with any type that accepts +.

CPP conditionals
----------------

Detour: Standard header file format
-----------------------------------

