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");
}