当前位置: 首页 > news >正文

C语言语法笔记

C语言语法笔记

常见的

switch case

switch(opcode){ case 0b00000000: //每一个都要带break; add(inst); //别忘了default break; //每个情况前面都有case case 0b10000000: //默认十进制,二进制十六进制要加0b0x li(inst); break; case 0b11000000: bner(inst); break; default: log_err("不存在指令"); break; }

位操作

int a; a >> 2; //a = 0b100 -> 0b11100
uint32_t b; b >> 2; //b = 0b100 -> 0b00100

二者区别是int带有符号位,右移会自动符号拓展,高位与符号位相同

imm << 20 >> 20; //利用上述特性,先将int型立即数移到最高位,再右移,实现自动符号扩展
uint32_t a1; uint32_t a2; uint32_t a3; uint32_t a4; uint32_t a; a = ((a1 & 0xff) << 24) | ((a2 & 0xff) << 16) | ((a3 & 0xff) << 8) | (a4 & 0xff); //通过移位操作和按位或按位与可实现位拼接 //!!!注意要加括号,&的优先级最高->公式都加括号

算术运算

ab = b + (ab - g)(i / k); //C会把(ab - g)认为是函数 两个数相乘要加*!!!! ❌ ab = b + (ab - g) * (i / k); //不要忘了* ✅

没见过的东西

## #

在C语言中##可以把左右拼接成一个新的标记
#可以把变量内容转换成字符串

A = AM##1; //A = AM1 string str = #(1 + 2 + 3) //str = "1 + 2 + 3"

在标准的 C 语言中,{ … } 只是单纯的代码块,没有返回值。但 GCC 扩展允许写 ({ 语句1; 语句2; 变量; }),这个结构的返回值就是最后一行的那个变量。像是一个小函数?🤔

#define io_read(reg) \ ({ reg##_T __io_param; \ // 第1行 语句1 ioe_read(reg, &__io_param); \ // 第2行 语句二 __io_param; }) // 第3行 返回值

((handler_t)lut[reg])(buf); //可以拆成三部分:

lut[reg]从数组 lut 中取出第 reg 个元素。这个元素是一个函数指针(指向某个函数的地址)。
(handler_t)这是一个强制类型转换。它把 lut[reg] 这个值,强制转换成 handler_t 类型。
(buf)是前面函数的参数
void (*handler_t)(void *buf);指向一个接收handler_t参数、返回 void 的函数的指针。


#define AM_DEVREG(id, reg, perm, ...) \ enum { AM_##reg = (id) }; \ typedef struct { __VA_ARGS__; } AM_##reg##_T; //用这个宏定义了很多结构体 AM_DEVREG( 1, UART_CONFIG, RD, bool present);

调用这个宏会生成对应的结构体,结构体名由拼接得来
例如

AM_DEVREG( 1, UART_CONFIG, RD, bool present);

等价于

typedef struct { bool present; }AM_UART_CONFIG_T;

结果是
AM_UART_CONFIG = 1
结构体有一个成员present

http://www.jsqmd.com/news/1157707/

相关文章:

  • 从零搭建高效Linux虚拟机:网络、磁盘与增强功能配置全解析
  • ESP32 Arduino 经典蓝牙 SPP 通信实战:2节点自动配对与LED控制(附完整代码)
  • 【0基础嵌入式学习日志】Day15:位操作、GPIO 寄存器模拟与 LED 控制
  • PagedAttention失效诊断与DeepSeek V4推理优化实战
  • 2026双叠自锁垫圈使用成本怎么降低
  • 猫抓浏览器插件:新手到专家的视频下载完全指南
  • 69、<简单>数组元素插入
  • 如果你用 Mac,那你可能需要 Noti Shift
  • 基于单片机人脸识别电子密码锁智能门禁指纹识别语音提醒防盗成品1123(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 3分钟快速安装:免费GitHub加速插件终极使用指南
  • 实测不踩坑!2026上海正规黄金回收商家榜单,本地人真心推荐 - 小蝶回收测评
  • AI视频生成实战:基于OpenMontage与AI编程助手的自动化工作流
  • 影刀RPA JSON文件处理:读写与嵌套解析
  • Unity游戏实时文本翻译插件XUnity.AutoTranslator原理与实战指南
  • 版本管理-Git Sourcetree
  • 02-01-确认环境依赖(全平台发布)
  • 2026年隧道升压器厂家综合对比指南,详解隧道升压器哪家好,从生产资质、设备性能、售后体系多角度筛选适配工程的厂商 - 栗子测评
  • mba论文银行开题报告范文
  • 2026上海黄金回收靠谱机构测评|7大品牌横向对比+避坑攻略 - 小蝶回收测评
  • 2026年赤峰经济纠纷律师推荐精选:5位实战经验值得信赖 - 本地品牌推荐
  • 蓝桥杯嵌入式 STM32G431 8大模块代码复用:从零到真题的3步移植法
  • 浏览器资源智能解析系统:网页媒体资源的高效捕获与一体化管理方案
  • 2026年河北地区GEO服务收费标准解析与实力机构盘点 - 品牌鉴赏官2026
  • oee_archive自动化脚本:update-gitattrbute.sh如何简化LFS追踪
  • WordPress资源站自动同步系统:多源数据采集与RiPro-V5主题集成
  • 伯爵中国官方售后服务中心|服务电话及详细地址权威信息声明(2026年7月最新) - 亨得利官方服务中心
  • Spring Cloud Samples 再升级:Kafka 4.0 Share Groups + Stream 6 大场景 + RAG 独立模块,消息驱动与 AI 能力全面进化
  • Python 3.12+MySQL+Redis构建生产级网络自动化底座
  • Docker 网段冲突实战:3步修改默认网桥 docker0 至 192.168.100.0/24
  • 2026本地木箱厂家推荐:定制木箱包装箱厂家推荐,上门木箱打包厂家一站式服务 - 栗子测评