# C语言——预处理(#define,#if..)
2023-12-14 23:24:45
C语言——预处理(#define,#if…)
1.#define
#include<stdio.h>
//c预处理器是一个文本替换工具,它们会指示编译器在实际编译之前完成所需的预处理
#define STR_DATA "123456"
//替换的宏一般是大写
//STR_DATA 称为替换标识符
#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常量替换
#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 //定义一个标识符B1
#undef B1 //取消标识符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 //A1
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;
//声明新数据类型:函数指针类型:类型名称 func_p
typedef void (*func_p)(void);
//定义一个存放函数地址的数组
func_p func_addr[10]={func1,func2};
//声明新数据类型:类型abc
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");
}
文章来源:https://blog.csdn.net/qq_47944751/article/details/134906365
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!