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

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

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

相关推荐
三品吉他手会点灯14 小时前
C语言学习笔记 - 27.C编程预备计算机专业知识 - 什么是字节
c语言·开发语言·笔记·学习
影sir14 小时前
不同测试数据下,该如何选择算法
算法·深度优先
潇湘散客14 小时前
CAX软件插件化设计实现牛刀小试
c++·算法·图形学·opengl
速易达网络14 小时前
2026,视觉算法正在经历一场静默革命
算法
WBluuue15 小时前
Codeforces 1094 Div1+2(ABCDE)
c++·算法
TENSORTEC腾视科技15 小时前
腾视科技大模型一体机解决方案:低成本私有化落地,重塑行业智能应用新格局
大数据·人工智能·科技·算法·ai·零售·大模型一体机
酿情师15 小时前
区块链原理与技术02:区块链的数据结构04(区块结构)
数据结构·区块链
夏日听雨眠15 小时前
数据结构(循环队列)
数据结构·算法·链表
平行侠15 小时前
30MacLaren-Marsaglia算法故事文件
数据结构·算法
灵动小溪15 小时前
claude code工具PC安装部署
人工智能·算法