# C语言——预处理(#define,#if..)

news/2024/7/7 20:55:20

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

http://lihuaxi.xjx100.cn/news/1880755.html

相关文章

postgresql设置免密登录

您提供的步骤描述了在 PostgreSQL 数据库环境中配置服务器间的 SSH 无密码登录和数据库用户认证的过程。这些步骤主要用于设置一个高可用性、负载平衡的数据库集群环境。让我们逐一解释这些步骤的目的和应用场景&#xff1a; 1. 启动 PostgreSQL 服务 systemctl start postgr…

英语论文写作常用词汇积累

baseline&#xff1a;比较算法好坏中作为“参照物”而存在&#xff0c;在比较中作为基线&#xff1b;目的是比较提出算法的性能或者用以彰显所提出的算法的优势&#xff1b; benchmark&#xff1a;评价算法好坏的一种规则和标准。是目前的模型能做到的比较好的效果&#xff1b…

C#,图算法——以邻接节点表示的图最短路径的迪杰斯特拉(Dijkstra)算法C#程序

1 文本格式 using System; using System.Text; using System.Linq; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer.Algorithm { public class Node // : IComparable<Node> { private int vertex, weigh…

2023年【建筑电工(建筑特殊工种)】免费试题及建筑电工(建筑特殊工种)试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)免费试题为正在备考建筑电工(建筑特殊工种)操作证的学员准备的理论考试专题&#xff0c;每个月更新的建筑电工(建筑特殊工种)试题及解析祝您顺利通过建筑电工(建筑特殊工种)考试。 1、【…

Unity 资源管理之Resources

Resources是一个特殊的文件夹&#xff0c;用于存放运行时加载的资源。 Resources文件夹中可以放置各种类型的资源文件&#xff0c;如纹理、模型、音频、预制体等&#xff0c;一般用来存储预制体和纹理信息。 通过API可以加载和访问该文件夹及其子文件夹中的资源。 当我们打包…

Python实现员工管理系统(Django页面版 ) 翻页封装

翻页处理在上一篇博客有进行详细的讲述&#xff0c;在本篇博客只会教大家如何封装代码。 Python实现员工管理系统&#xff08;Django页面版 ) 五-CSDN博客 在上一小节中我们实现了条件筛选和翻页处理&#xff0c;我们可以从前面写的一些组件可以发现&#xff0c;翻页处理可以运…

WPF(Windows Presentation Foundation)的 ToolBar控件

WPF&#xff08;Windows Presentation Foundation&#xff09;的 ToolBar 是一种用于创建工具栏的控件。 工具栏通常位于应用程序窗口的顶部或侧边&#xff0c;并提供了一组常用的工具按钮或命令&#xff0c;用于执行特定的操作或访问特定的功能。 ToolBar 控件是 WPF 中的一个…

数据可视化|jupyter notebook运行pyecharts,无法正常显示“可视化图形”,怎么解决?

前言 本文是该专栏的第39篇,后面会持续分享python数据分析的干货知识,记得关注。 相信有些同学在本地使用jupyter notebook运行pyecharts的时候,在代码没有任何异常的情况下,无论是html还是notebook区域,都无法显示“可视化图形”,界面区域只有空白一片。遇到这种情况,…