The preprocessor directive #include inserts the contents of header files into the source code. Common header files include stdio.h, stdlib.h, and math.h. The #define directive defines macros that are replaced before compilation. Functions in math.h perform mathematical operations on double values. Functions in stdlib.h provide common utilities like converting strings to integers with atoi() and generating random numbers with rand() and srand().
2. Preprocessor
? Preprocessor
¨C Permits to define simple macros that are evaluated and
expanded prior to compilation.
¨C Commands begin with a ¡®#¡¯.
¨C #define : defines a macro [Ex] #include <stdio.h>
¨C #undef : removes a macro definition #define PI 3.14159
¨C #include : insert text from file
¨C #if : conditional based on value of expression
¨C #ifdef : conditional based on whether macro defined
¨C #ifndef : conditional based on whether macro is not defined
¨C #else : alternative
¨C #elif : conditional alternative
¨C defined() : preprocessor function: 1 if name defined, else 0
#if defined(__NetBSD__)
2
3. Preprocessor
? #include <filename> or #include ¡°filename¡±
¨C Include contents of filename in this position (not modify your
source file, but make a new temporary file just before compile)
¨C <> is used if filename is in the system default directory
(Most of the standard header files are in the default directory)
¨C ¡°¡± 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
¨C Header files with the extension ¡°.h¡± are included by #include
? Contents of Header file
¨C Prototype of Function
¨C ¡®extern¡¯ global variables Refer to Modulization
¨C type definition, etc.
? Typical header files
¨C stdio.h, stdlib.h, math.h, etc.
4
5. Preprocessor
? #define [identifier] [replacement]
¨C replaces any occurrence of identifier in the rest of the code by
replacement.
¨C 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) ;
}
¨C Compiled after the code modified by preprocessor as follows.
void main() {
int c = ((3)*(2)) ;
}
8
9. Preprocessor
? Macro function: Be careful! Simple replacement!!
¨C what will happen?
#define multiply(a,b) a*b
void main() {
int c = multiply(3+1,2+2) ;
}
¨C Compiled after the code modified by preprocessor as follows.
void main() {
int c = 3+1*2+2 ;
}
¨C Use ¡®()¡¯ for safety.
9
11. Mathematical Functions
? Mathematical Functions
¨C sqrt(), pow(), exp(), log(), sin(), cos(), tan(), etc.
¨C Include the Header file <math.h>
¨C 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);
¨C 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:
¨C stdio.h: file and console (also a file) IO
? perror, printf, open, close, read, write, scanf, etc.
¨C stdlib.h: common utility functions
? malloc, calloc, strtol, atoi, etc
¨C string.h: string and byte manipulation
? strlen, strcpy, strcat, memcpy, memset, etc.
¨C math.h: math functions
? ceil, exp, floor, sqrt, etc.
14
15. Miscellaneous functions
? Standard Headers you should know about:
¨C ctype.h: character types
? isalnum, isprint, isupport, tolower, etc.
¨C errno.h: defines errno used for reporting system errors
¨C signal.h: signal handling facility
? raise, signal, etc
¨C stdint.h: standard integer
? intN_t, uintN_t, etc
¨C time.h: time related facility
? asctime, clock, time_t, etc.
15
16. Miscellaneous functions
? Miscellaneous Functions
¨C atoi(), rand(), srand()
¨C <stdlib.h>: Common Utility Functions
¨C atoi(¡°String¡±): Convert string to integer
int a = atoi( ¡°1234¡± ) ;
¨C rand() : Generate random number
int a = rand() ;
¨C 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