Difference between revisions of "Week 2"

From CDOT Wiki
Jump to: navigation, search
Line 63: Line 63:
  
 
Another example: ''#define MAX(x, y)  ((x)>(y)?(x):(y))''
 
Another example: ''#define MAX(x, y)  ((x)>(y)?(x):(y))''
 +
 +
<u>Conditional Compilation</u>
 +
 +
With conditional compilation you can tell the compiler to only compile a section of the code.
 +
 +
''#define COMPINT 1''
 +
''#define COMPDOUBLE 2''
 +
''#define COMP COMPINT''
 +
 +
In the code:
 +
 +
''#ifdef COMP == COMPINT''
 +
    Code
 +
    Code
 +
    code
 +
''#endif''
 +
 +
''#ifdef COMP == COMPDOUBLE''
 +
    Code
 +
    Code
 +
    Code
 +
''#else''
 +
    Code
 +
    Code
 +
    Code
 +
''#endif''
 +
 +
It will only compile the first if statement and the else statement.

Revision as of 13:21, 19 May 2010

Reviewing IPC 144

The Question Mark Operator

c = a > b ? 100 : 200;

It replaces an if statement and is much faster. If a is greater than b then 100, else 200.

Please note: The types 100 and 200 must be the same type or else it will not work.

Function Calls

printf("%d  %d, b, b = b + 1);

It returns 21 21. Why? Some compilers stack the arguments and read the last argument first. Therefore, it would see b as 21 as well.

a = printf("%d  %d, b, b = b + 1);

printf("%d\n", a);

What is a?

6

printf returns the number of characters printed (scanf also returns the number of characters input - special note: scanf cannot return a number greater than the % symbols in your scanf statement).

A function must have one point of entry and one point of exit. Only one return statement per function.

The Include Statement

#include <stdio.h>

The hash tag (#) tells the compiler how to do things BEFORE compilation.

The #include keyword brings in the code from inside <stdio.h>

Header files are usually definitions of functions, classes, templates, etc.

The Define Statement

A #define statement is a simple search and replace in the current file.

#define SUM a+b

printf("%d\n", SUM*2);

This will print 50, not 60. It replaces SUM with a+b then operator precedence allows it to multiply first before addition.


Macros

#define SUM(x, y) (x+y)

printf("%d\n", SUM(i, j)*2);

printf("%d\n", SUM(a, b)*2);

Those two statements will have i+j and a+b instead.

Why not replace SUM(a, b) to a+b in the code instead of telling SUM to do it for you before compilation?

You might need to change several different things. Could also make it easier to manage code?

Another example: #define MAX(x, y) ((x)>(y)?(x):(y))

Conditional Compilation

With conditional compilation you can tell the compiler to only compile a section of the code.

#define COMPINT 1 #define COMPDOUBLE 2 #define COMP COMPINT

In the code:

#ifdef COMP == COMPINT

    Code
    Code
    code

#endif

#ifdef COMP == COMPDOUBLE

    Code
    Code
    Code

#else

    Code
    Code
    Code

#endif

It will only compile the first if statement and the else statement.