C语言——预处理(#define,#if…)
1.#define
# include <stdio.h>
# define STR_DATA "123456"
# define INT_DATA 6666
# define PRINT_DATA ( x) if ( x) printf ( "为真.\n" ) ; \
else printf ( "为假.\n" ) ;
int main ( int argc, char * * argv)
{
printf ( "%s\n" , STR_DATA) ;
printf ( "%d\n" , INT_DATA) ;
PRINT_DATA ( 1 ) ;
PRINT_DATA ( 0 ) ;
return 0 ;
}
# include <stdio.h>
# define PRINT_DATA1 ( a, b) printf ( #a"456" # b "\n" ) ;
# define PRINT_DATA2 ( a, b) printf ( "%s,%s\n" , #a, #b) ;
int main ( int argc, char * * argv)
{
PRINT_DATA1 ( 123 , "789" ) ;
PRINT_DATA2 ( 123 , "789" ) ;
return 0 ;
}
# include <stdio.h>
# define PRINT_DATA1 ( a, b) printf ( "%d\n" , a## b) ;
# define PRINT_DATA ( a) a## a
int main ( int argc, char * * argv)
{
PRINT_DATA1 ( 1 , 4 ) ;
PRINT_DATA1 ( 100 , 400 ) ;
printf ( "%d\n" , PRINT_DATA ( 4 ) ) ;
return 0 ;
}
# include <stdio.h>
# define PRINT_DATA1 ( a, b) printf ( "%d\n" , a## b) ;
# define PRINT_DATA ( a) a## a
int main ( int argc, char * * argv)
{
PRINT_DATA1 ( 1 , 4 ) ;
PRINT_DATA1 ( 100 , 400 ) ;
printf ( "%d\n" , PRINT_DATA ( 4 ) ) ;
return 0 ;
}
# include <stdio.h>
# define A3
# if ! defined ( A1) && ! defined ( A2) && ! defined ( A3)
# error "没有定义A1或者A2或者A3"
# endif
int main ( int argc, char * * argv)
{
return 0 ;
}
# include <stdio.h>
# define B1
# undef B1
# ifdef B1
int data= 123 ;
# else
int data= 666 ;
# endif
int main ( int argc, char * * argv)
{
printf ( "data=%d\n" , data) ;
return 0 ;
}
# if 1
# include <stdio.h>
# define A1 "1234"
# define A2 6666
# define MAX ( a, b) ( ( a) > ( b) ? ( a) : ( b) )
# define A3 ( a) if ( a) printf ( "为真.\n" ) ; \
else printf ( "为假.\n" ) ;
# define PRINT_1 ( a) printf ( "%s\n" , #a) ;
# define PRINT_2 ( a, b) printf ( #a"456" # b "\n" ) ;
# define PRINT_3 ( a, b) printf ( "%d\n" , a## b) ;
int main ( int argc, char * * argv)
{
printf ( "%s\n" , A1) ;
printf ( "%d\n" , A2) ;
printf ( "MAX=%d\n" , MAX ( 1 , 2 ) ) ;
A3 ( 1 ) ;
PRINT_1 ( 1234 ) ;
PRINT_2 ( 123 , 789 ) ;
PRINT_3 ( 12 , 34 ) ;
return 0 ;
}
# endif
2.ifdef
# include <stdio.h>
# define DEF_A
# ifdef DEF_A
# define STR_DATA "123"
# else
# define STR_DATA "456"
# endif
int main ( int argc, char * * argv)
{
printf ( "STR_DATA=%s\n" , STR_DATA) ;
return 0 ;
}
3.ifndef
# include <stdio.h>
# define AA
# ifndef AA
# error "你没有定义AA标识符"
# endif
# define A1
# undef A1
# ifdef A1
# define STA_DATA "123"
# elif 12 == 12
# define STA_DATA "456"
# elif 34 = 45
# define STA_DATA "789"
# else
# define STA_DATA "ABC"
# endif
int main ( int argc, char * * argv)
{
printf ( "%s\n" , STA_DATA) ;
return 0 ;
}
4.typedef
# include <stdio.h>
void func1 ( ) ;
void func2 ( ) ;
# if 0
# define u8 unsigned char
# define u16 unsigned short
# define u32 unsigned int
# endif
# if 1
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef void ( * func_p) ( void ) ;
func_p func_addr[ 10 ] = { func1, func2} ;
typedef char abc[ 10 ] ;
# endif
int main ( int argc, char * * argv)
{
u8 a;
abc a1, a2;
func_addr[ 0 ] ( ) ;
func_addr[ 1 ] ( ) ;
printf ( "%ld\n" , sizeof ( a1) ) ;
printf ( "%ld\n" , sizeof ( a2) ) ;
return 0 ;
}
void func1 ( )
{
printf ( "123\n" ) ;
}
void func2 ( )
{
printf ( "456\n" ) ;
}