# 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。