2. Preprocessor
Preprocessor
– Permits to define simple macros that are evaluated and
expanded prior to compilation.
– Commands begin with a ‘#’.
– #define : defines a macro [Ex] #include <stdio.h>
– #undef : removes a macro definition #define PI 3.14159
– #include : insert text from file
– #if : conditional based on value of expression
– #ifdef : conditional based on whether macro defined
– #ifndef : conditional based on whether macro is not defined
– #else : alternative
– #elif : conditional alternative
– defined() : preprocessor function: 1 if name defined, else 0
#if defined(__NetBSD__)
2
3. Preprocessor
#include <filename> or #include “filename”
– Include contents of filename in this position (not modify your
source file, but make a new temporary file just before compile)
– <> is used if filename is in the system default directory
(Most of the standard header files are in the default directory)
– “” is used if filename is not in the default directory
(Write the path to filename if it is not in the current directory)
[Ex]
Include stdio.h which is in the default
#include <stdio.h>
directory
#include “./test/file.h”
Include file.h in test directory.
3
4. Preprocessor
Header file
– Header files with the extension “.h” are included by #include
Contents of Header file
– Prototype of Function
– ‘extern’ global variables Refer to Modulization
– type definition, etc.
Typical header files
– stdio.h, stdlib.h, math.h, etc.
4
5. Preprocessor
#define [identifier] [replacement]
– replaces any occurrence of identifier in the rest of the code by
replacement.
– replacement can be an expression, a statement, a block or simply
anything.
[Ex]
#define LIMIT 100 Preprocessor regards LIMIT as 100,
#define PI 3.14159 PI as 3.141592.
5
6. Preprocessor
#define
#include <stdio.h>
#define LIMIT 100
#define PI 3.14159
void main(void)
{
printf( “%d, %fn”, LIMIT, PI ) ;
}
Preprocessor makes a temporary file.
…
After that, compile the temporary file.
void main(void)
{
printf( “%d, %fn”, 100, 3.14159 ) ;
}
6
7. Preprocessor
Example
#include <stdio.h> void main(void)
{
#define YELLOW 0 int color ;
#define RED 1
#define BLUE 2 for( color = YELLOW ; color <= BLUE ; color++ ) {
switch( color ) {
case YELLOW : printf( “Yellown” ) ; break ;
case RED : printf( “Redn” ) ; break ;
case BLUE : printf( “Bluen” ) ; break ;
}
}
}
7
8. Preprocessor
Macro function: Declare a function by using #define
#define multiply(a,b) ((a)*(b))
void main() {
int c = multiply(3,2) ;
}
– Compiled after the code modified by preprocessor as follows.
void main() {
int c = ((3)*(2)) ;
}
8
9. Preprocessor
Macro function: Be careful! Simple replacement!!
– what will happen?
#define multiply(a,b) a*b
void main() {
int c = multiply(3+1,2+2) ;
}
– Compiled after the code modified by preprocessor as follows.
void main() {
int c = 3+1*2+2 ;
}
– Use ‘()’ for safety.
9
11. Mathematical Functions
Mathematical Functions
– sqrt(), pow(), exp(), log(), sin(), cos(), tan(), etc.
– Include the Header file <math.h>
– All the math functions have argument with double type and
return value with double type.
[Ex] double sin(double); /* argument is the angle in radians */
double pow(double, double);
– Give “-lm” flag when you compile this with Unix(gcc).
[Ex] gcc filename.c -lm
11
12. Mathematical Functions
[Ex] #include <stdio.h>
#include <math.h>
#define PI 3.1415926
int main() {
double r = PI / (2*90); /* 180 radian = 1 degree */
int i;
for(i=0; i<=90; i+=5) {
printf("cos(%d) = %ft", i, cos(r*i));
printf("sin(%d) = %ft", i, sin(r*i));
printf("tan(%d) = %fn", i, tan(r*i));
} cos(0) = 1.000000 sin(0) = 0.000000 tan(0) = 0.000000
} …
cos(45) = 0.707107 sin(45) = 0.707107 tan(45) = 1.000000
…
cos(90) = 0.000000 sin(90) = 1.000000 tan(90) = 37320539.634355
12
14. Miscellaneous functions
Standard Headers you should know about:
– stdio.h: file and console (also a file) IO
• perror, printf, open, close, read, write, scanf, etc.
– stdlib.h: common utility functions
• malloc, calloc, strtol, atoi, etc
– string.h: string and byte manipulation
• strlen, strcpy, strcat, memcpy, memset, etc.
– math.h: math functions
• ceil, exp, floor, sqrt, etc.
14
15. Miscellaneous functions
Standard Headers you should know about:
– ctype.h: character types
• isalnum, isprint, isupport, tolower, etc.
– errno.h: defines errno used for reporting system errors
– signal.h: signal handling facility
• raise, signal, etc
– stdint.h: standard integer
• intN_t, uintN_t, etc
– time.h: time related facility
• asctime, clock, time_t, etc.
15
16. Miscellaneous functions
Miscellaneous Functions
– atoi(), rand(), srand()
– <stdlib.h>: Common Utility Functions
– atoi(“String”): Convert string to integer
int a = atoi( “1234” ) ;
– rand() : Generate random number
int a = rand() ;
– srand( Initial Value ) : Initialize random number generator
srand( 3 ) ;
16
17. Miscellaneous functions
Ex.: Print 10 random numbers
#include <stdio.h>
#include <stdlib.h>
int main() {
Run this Program twice
for(i=0; i<10; i++)
printf(“%dn”, rand() ) ;
}
Print different random number in every execution
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand( (int)time(NULL) ) ;
for(i=0; i<10; i++)
printf(“%dn”, rand() ) ;
}
17