C语言宏和结构体的使用代码

先看代码:

cpp 复制代码
#include <stdio.h>
#include <string.h>

// 定义一个宏,用于定义结构体
#define DEFINE_STRUCT(name, type1, name1, type2, name2, size, cf) \
    typedef struct {                                          \
        type1 name1;                                       \
        type2 name2[size];                                 \
        void(*cf)(void);                                 \
    } name;

// 使用宏定义一个结构体,指定字符数组的大小
DEFINE_STRUCT(Person, int, age, char, name, 50, cft)

void print_callback(void) {
    printf("Hello, world!\n");
}

// 定义一个宏,用于初始化结构体
#define INIT_PERSON(p, a, n, cb) do {                          \
    (p).age = (a);                                         \
    strncpy((p).name, (n), sizeof((p).name) - 1);         \
    (p).name[sizeof((p).name) - 1] = '\0';                \
    (p).cft = cb;                                  \
} while(0)

// 定义一个宏,用于打印结构体成员
#define PRINT_PERSON(p) do{ \
    printf("Age: %d, Name: %s\n", (p).age, (p).name);\
    (p).cft(); \
} while(0)

int main() {
    // 创建一个 Person 结构体实例
    Person person;

    // 使用宏初始化结构体
    INIT_PERSON(person, 25, "Alice", print_callback);
    // person.callback();

    // 使用宏打印结构体成员
    PRINT_PERSON(person);

    return 0;
}

这段代码种很灵活定义了结构体中参数和函数。

很多代码其实可以用宏简化。

相关推荐
屁股割了还要学25 分钟前
【数据结构入门】堆
c语言·开发语言·数据结构·c++·考研·算法·链表
草莓熊Lotso3 小时前
【洛谷题单】--分支结构(三)
c语言·c++·刷题·洛谷
源代码•宸3 小时前
MySQL 索引:索引为什么使用 B+树?(详解B树、B+树)
数据结构·数据库·经验分享·b树·mysql·b+树·b-树
阿群今天学习了吗8 小时前
“鱼书”深度学习进阶笔记(3)第四章
人工智能·笔记·python·深度学习·算法
IT猿手8 小时前
2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码
算法·数学建模·matlab·多目标优化算法·多目标算法
xiaobobo333010 小时前
C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
c语言·开发语言·结构体指针
数据智能老司机11 小时前
图算法趣味学——最大流算法
数据结构·算法·云计算
秋难降12 小时前
【数据结构与算法】———深度优先:“死磕 + 回头” 的艺术
数据结构·python·算法
数据智能老司机12 小时前
图算法趣味学——图着色
数据结构·算法·云计算
数据智能老司机12 小时前
图算法趣味学——启发式引导搜索
数据结构·算法·云计算