当前位置:首页 > > 满天芯
[导读]道哥的第031篇原创一、前言二、小试牛刀1. 灵活的数组成员2. 不定参数的宏定义三、为自己打气一、前言这几天在把一个嵌入式项目的代码,移植到另一个平台,发现很多地方用的都是C89标准。1999年,C语言的标准化委员会发布了C99标准,引入了许多特性,包括可变长度的数组、灵活的数...


道哥的第 031 篇原创
  • 一、前言

  • 二、小试牛刀

    • 1. 灵活的数组成员

    • 2. 不定参数的宏定义

  • 三、为自己打气

一、前言

这几天在把一个嵌入式项目的代码,移植到另一个平台,发现很多地方用的都是 C89 标准。

1999 年,C语言的标准化委员会发布了 C99 标准,引入了许多特性,包括可变长度的数组、灵活的数组成员(用在结构体)、对IEEE754浮点数的改进、指定成员的初始化器、内联函数、支持不定参数个数的宏定义,在数据类型上还增加了 long long int 以及复数类型。

于是最近找了一本比较新的 C 语言书籍翻了一下,发现很多比较偏僻的语法,很少被使用到,包括 C99 标准中的一些内容,所以我想把这部分内容整理一下,也是让自己对这一门古老的语言重新梳理一下。

二、小试牛刀

1. 灵活的数组成员

先不解释概念,我们先来看一个代码示例:

// 一个结构体,成员变量 data 是指针typedef struct _Data1_ { int num; char *data;} Data1;
void demo6_not_good(){ // 打印结构体的内存大小 int size = sizeof(Data1); printf("size = %d \n", size);
// 分配一个结构体指针 Data1 *ams = (Data1 *)malloc(size); ams->num = 1;
// 为结构体中的 data 指针分配空间 ams->data = (char *)malloc(1024); strcpy(ams->data, "hello"); printf("ams->data = %s \n", ams->data);
// 打印结构体指针、成员变量的地址 printf("ams = 0x%x \n", ams); printf("ams->num = 0x%x \n",
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在工业自动化项目中,嵌入式设备(如数据采集终端、边缘网关)与PLC直连的需求越来越普遍。标准Modbus RTU固然通用,但某些场景下需要更轻量、更安全或更适配私有数据的协议——比如批量读写非连续地址、携带时间戳、加密校...

关键字: PLC自定义协议 C语言 串口通信

嵌入式产品的开发痛点往往是:硬件还没定型,需求还在变动,但老板想尽快看到效果。如果用C语言从头写固件,每次修改都得编译、烧录、调试,一天改不了几次。更合理的做法是:先用Python在PC或单板计算机上快速验证产品逻辑,确...

关键字: Python 嵌入式原型 C语言

嵌入式开发中,C语言是底层硬件控制的主力——直接操作寄存器、处理中断、管理内存。但C语言在数据分析、可视化、快速原型方面效率低下。Python恰好相反:开发效率高、生态丰富,但无法直接访问硬件。将两者结合,用C编写硬件驱...

关键字: C语言 Python 混合编程

嵌入式软件中,状态机无处不在——按键消抖、通信协议解析、菜单导航、设备工作流程。很多新手习惯用一连串的if-else或switch-case嵌套来实现状态跳转,逻辑稍微复杂一点,代码就变成一团乱麻:状态变量散落各处,跳转...

关键字: C语言 状态机 函数指针 可维护性

嵌入式开发中,纳秒级延时是刚需——SPI时钟极性切换、I2C起始条件保持时间、WS2812B灯带时序,这些场景下HAL_Delay(1)的毫秒级精度完全不够用。很多人用for(i=0;i

关键字: 指针操作寄存器 DWT计数器 纳秒延时 C语言

在电池供电的物联网设备中,MCU的待机功耗常常是决定续航时间的首要因素。一颗纽扣电池标称容量为200mAh,如果MCU始终运行在满速状态(功耗约20mA),理论续航仅10小时;而通过合理的睡眠模式配置,将待机功耗压低至μ...

关键字: C语言 GD32

异常处理的本质是"兜底"。‌ C语言没有try-catch,但GD32的硬故障异常(HardFault、BusFault、UsageFault、MemManage)天然提供了最后一道防线。当程序跑飞、...

关键字: C语言 GD32

USART(通用同步/异步收发器)是MCU与外部设备通信最基础也最常用的外设之一。在GD32系列MCU中,USART支持全双工异步通信,通过TX/RX两根信号线即可实现与PC上位机、蓝牙模块、其他MCU的数据交互。

关键字: C语言 GD32

该项目是一个基于微控制器的C语言编写的音频生成器,配备三个按钮,用户可通过按钮播放声音或调节音高。它作为基本GPIO控制和按钮逻辑的实际演示。

关键字: 微控制器 C语言 音频生成器 STM32F407ZGT6

在C语言的众多运算符中,三目运算符是唯一需要三个操作数的特殊存在,它的语法形式为“条件表达式 ? 表达式1 : 表达式2”。很多开发者对它的认知停留在“if-else的简写”层面,日常写代码时要么过度滥用把代码写得晦涩难...

关键字: C语言 运算符
关闭