【转】神奇的xx宏

极化码理论及算法研究6-SCL、CA-SCL及matlab仿真 极化码译码算法5——SCL/CA-SCL译码算法系列目录1、引言2、串行抵消列表(SCL)译码算法2.1、路径度量PM 系列目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 1、引言 在上一节中,介绍了经典的SC译码算法的理论原理以及其matlab仿真代码,SC译码算法具有较低的译码复杂度,但是由于每个译码的比特信息都依赖于前面所有的比特信息的译码结果,得 阅读详情

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>


前段时间研究lcc,看见token.h里有这样一些代码:

xx(FLOAT,     1, 0,  0,    0,      CHAR,   "float")

xx(DOUBLE,    2, 0,  0,    0,      CHAR,   "double")

xx(CHAR,      3, 0,  0,    0,      CHAR,   "char")

xx(SHORT,     4, 0,  0,    0,      CHAR,   "short")

yy(0,           94,     7,      BXOR,   bittree,'^',    "^")

yy(0,           95,     0,      0,      0,      0,      0)

yy(0,           96,     0,      0,      0,      0,      0)

yy(0,           97,     0,      0,      0,      0,      0)


#undef yy

#undef xx

初看有点不解,xx到底是个什么东西呢?但从这些信息很容易想到,其中每一行描述一个token的信息。把代码大概看了一下,主要有以下几个地方引用到token.h:

在enode.c中:

Tree (*optree[])(int, Tree, Tree) = {

#define xx(a,b,c,d,e,f,g) e,

#define yy(a,b,c,d,e,f,g) e,

#include "token.h"

};
 

在expr.c中:

static int oper[] = {

#define xx(a,b,c,d,e,f,g) d,

#define yy(a,b,c,d,e,f,g) d,

#include "token.h"

};

在output.c中:

static char *tokens[] = {

#define xx(a,b,c,d,e,f,g) g,

#define yy(a,b,c,d,e,f,g) g,

#include "token.h"

};
 

看了这些代码,一下明了了作者的意图:把每个token相关的信息放在一起,便于集中管理,而在不同的地方,通过把xx/yy定义成不同功能的宏,以提取所需要的信息。称它为xx/yy,正是因为这两个宏在使用时还有没定义,在不同的上下文中,其功能是不同的。

我们做的是一个智能手机,在项目早期总会不断有新的AP加入进来,一个APP都很多描述信息,每次加入新AP时,总会遗漏某些信息没有加入,导致Autobuild失败,搞得我很烦,检查了一下相关的代码。发现AP具有下信息:

1.主窗口类

2.主窗口名

3.ID

4.名称

5.INF文件名

6.入口函数

7.资源

8.APP的说明

每一项的定义都在不同的地方,更麻烦的是,增加一个APP竟要4个人配合修改:模块负责人本人,负责修改PC和硬件的工程文件的人,负责加入APP的ID的人,负责加APP的入口函数及其它信息的人。尽管增加APP时用邮件通知了大家,但总有人忘了修改自己的负责的地方,所以常常让Autobuild编译失败。


看了lcc里的xx/yy的方式后,我想在一个地方统一管理这些信息可以避免不必要的麻烦,于用了这种方式去声明APP的信息,如:

#define ALL_APPS_LIST /

  xx("桌面",                 STATUSBAR_CLASS,         STATUSBAR_NAME,         DESKTOP_APPID,       DESKTOPAPPNAME,          DESKTOPWINMAININF,       DesktopWin,               desktop_res)/

  xx("名片",                 CARDCLASS,               CARDNAME,               CARD_APPID,          CARDAPPNAME,             CARDWINMAININF,          Card_WinMain,             card_res)/

  xx("电话",                 TELCLASS,                TELNAME,                TELEPHONE_APPID,     TELAPPNAME,              TELWINMAININF,           Telephone_WinMain,        tel_res)/

使用方式如下:

#undef  xx

#define xx(APP_NAME_COMMENT, WIN_CLASS, WIN_NAME, APP_ID, APP_NAME, APP_INF, APP_WINMAIN, APP_RES)  {(WIN_CLASS), (WIN_NAME)},

const AppClassWindow AppClassDefine[]=

{

       ALL_APPS_LIST

       {NULL,NULL},

};
 

#undef  xx

#define xx(APP_NAME_COMMENT, WIN_CLASS, WIN_NAME, APP_ID, APP_NAME, APP_INF, APP_WINMAIN, APP_RES)  APP_ID,

typedef enum tagAPPID_E

{

    ALL_APPS_LIST

    MAX_APPID

}APPID_E;

现在只要一个人维护这张表和工程文件,其它地方都不需要修改,至此之后一切平安无事。

最近研究ZX的手机开发平台,里面用了IMAGE_DEF/TEXT_DEF等实现了类似的功能,xx换成了更具明显意义的宏,给人感觉更直观一些。

【思考模型框架】采用双钻模型:发散(桌面研究/用户访谈)→收敛(需求归类/优先级排序),输出需求规格书、追踪矩阵及产品待办清单。 设计思维双钻模型是一种以用户为中心的需求管理方法,通过"发散-收敛"的双循环确保问题定位准确、方案切实可行。第一钻石(探索→定义)聚焦"找对问题",运用用户访谈、田野调查等方法挖掘真实需求;第二钻石(开发→交付)解决"做对方案",通过原型测试、A/B测试验证可行性。该模型强调低保真验证、多团队协作和真实用户测试,避免资源浪费与伪需求开发。典型应用场景包括产品功能优化、用户体验提升等需要精准落地的需求场景。核心价值在于建立从用户痛点到解决方案的可控闭 阅读详情

相关推荐

R语言实战:5分钟搞定NHANES数据库的加权分析与可视化(附完整代码)

本文提供了一份R语言实战指南,帮助研究者在5分钟内完成NHANES数据库的加权分析与可视化。通过详细的代码示例,涵盖数据获取、清洗、加权分析和可视化全流程,特别适合公共卫生和流行病学研究者快速掌握复杂抽样数据的处理方法。

www00的博客 251

神奇的xx宏

转载时请注明出处和作者联系方式作者联系方式:李先静 前段时间研究lcc,看见token.h里有这样一些代码:xx(FLOAT,     1, 0,  0,    0,      CHAR,   "float")xx(DOUBLE,    2, 0,  0,    0,      CHAR,   "double")xx(CHAR,      3, 0,  0,    0,    

国产开源 GUI 引擎 AWTK 6180

Infiniband互连网络概述

一、Infiniband是什么? InfiniBand(简称IB)是一种工业标准规范,它定义了一种输入/输出架构,用于计算节点、通信基础设施设备、存储和嵌入式系统的互连。操作系统可以是Linux、Windows或ESXI。 IB网络一共是五层,从第一天起,IB就被设计为提供一个端到端的解决方案,改善和加速从物理层到上层的所有协议层。 IB协议于2000年由IBTA(InfiniBand Trade Association)提出,其规定了一...

weixin_41687819的博客 5226

宏开关管理模块的实现[C语言]

一、功能宏优点     在进行软件系统的开发过程中,对不同的功能模块的代码使用分别使用与之对应的宏将其控制起来,其有如下优点:     ①、方便移植         在移植过程中,可根据功能宏快速的将功能模块代码进行提取和分离。     ②、增强可扩展性         可通过宏的开启和关闭来控制此功能开启和关闭,增强了平台的可配置性、可扩展性。     ③、快速定位问题

做事先做人! 6599

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1146

Innovus实战:5分钟搞定postRoute阶段冗余hold buffer的自动清理(附PHC识别技巧)

本文分享了在数字IC后端设计中使用Innovus工具,于postRoute阶段自动清理冗余hold buffer的实战技巧。通过配置时序感知的面积回收模式,可在5分钟内安全移除非关键路径上的PHC缓冲器,有效优化芯片面积与功耗,并附有PHC识别与验证方法。

moon9的博客 399

C语言编程规范 — 宏

C语言编程规范 — 宏的使用规范总结。

yunfan 6582

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:步进电机PID位置控制系统的实现

步进电机(Stepper Motor)是一种将电脉冲信号转化为角位移的执行元件,具有结构简单、控制方便、定位精度高等优点,广泛应用于数控机床、机器人、打印机、3D打印机等需要精确定位的场合。传统的步进电机多采用开环控制,但在高速或负载变化较大的情况下容易出现丢步、振荡等问题。为提高控制精度与响应性能,闭环PID控制被引入步进电机的位置控制中,通过编码器或旋转变压器等反馈装置,实现高精度、高稳定性的位置控制。本教程将带你使用构建一个基于PID控制的步进电机位置控制系统仿真模型步进电机建模。

MHD0815的博客 9686

c语言宏的高级项目使用,在C/C++项目中合理使用宏详解

C++项目中常使用宏来做跨平台、功能实现隔离、变量定义的功能,这篇文章来讨论下是否所有情况下都适合用宏小D的故事程序员小D接到一个任务,需要给同事A提供一个复杂公式的实现。输入为一组参数,输出一个计算结果。大致如下:double computeSomeThing(double paramA,double paramB,double paramC);小D很快完成了。过了几天同事A又来找他,说现在需要...

weixin_27758233的博客 817

2026美赛数学建模竞赛 MCM C题:与星共舞的数据 问题一 粉丝投票估计模型 详细解题思路和代码

2026美赛数学建模竞赛 MCM C题:与星共舞的数据 问题一 粉丝投票估计模型 详细解题思路和代码.。开发一个(或多个)数学模型,用于估算每位选手在他们参赛的各周的粉丝投票数(这是未知且严格保密的)。您的模型是否能正确估算出导致每周淘汰结果一致的粉丝投票数?提供一致性度量。您估算出的粉丝投票总数有多少确定性?这种确定性对于每位选手/每周是否总是相同?为您的估算提供确定性度量。

YOLO 852

基于聚类特征工程的水果销量预测:聚类算法对比与多模型评估

水果销量预测研究:聚类分群与多模型对比 摘要 本研究提出了一种融合聚类分析与机器学习的水果销量预测方法。基于包含12个维度的销售数据集,首先采用K-Means、BIRCH和DBSCAN三种聚类算法对水果品类进行分群,通过轮廓系数等指标评估显示BIRCH算法表现最优(0.387)。随后针对不同群组构建差异化特征工程,并比较XGBoost、LightGBM和LSTM三种预测模型性能。实验结果表明:基于聚类特征工程的LightGBM模型预测效果最佳(RMSE=2.34,R²=0.87).

huanghm88的专栏 137

STM32F10X_XX宏定义的选择及含义

IAR编译器中STM32F10X_XX宏定义的选择 如果你使用stm32f10x_stdperiph_lib,会发现在stm32f10x.h文件会有一段关于宏选择的代码,如:[cpp]view plaincopy#if!defined(STM32F10X_LD)&amp;&amp;!defined(STM32F10X_MD)&amp;&amp;!...

魏波 1万+

SAP:SAP的内存管理详解

SAP 的内存管理是一个复杂的多层机制,涉及应用服务器、数据库和操作系统的协同工作。通过合理配置和优化,可以显著提高 SAP 系统的性能和稳定性。

baidu_35680696的博客 1212

神奇的计算机相关文章,神奇电脑想象作文

神奇电脑想象作文在日复一日的学习、工作或生活中,大家都经常接触到作文吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向。你知道作文怎样写才规范吗?下面是小编为大家收集的神奇电脑想象作文,希望对大家有所帮助。神奇电脑想象作文1神奇电脑20xx年我国研发出一款神奇的电脑,在这个电脑身上,有许许多多的小按钮它的功能可多了,请耐心听我介绍。“哇!这里的空气这里的空气真清新呀,哎,可惜那...

weixin_30444191的博客 239

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python项目之神奇时钟

神奇时钟 程序说明 程序的文件名称为Clock.py,程序除了要用到前两个项目已经熟悉的Python语言功能之外,还要使用SimpleGUITk来在画布中绘制文字和图像,并通过SimpleGUITk的计时器定期更新画布中的文字和图像。 通过该项目你可以获得以下能力: 了解Python处理日期时间的技巧 了解simpleguitk绘制文字和图像的功能 理解时间事件的工作原理 增强逻辑思维能力 培养解决问题的能力 编码步骤 我们已经为该小项目提供了一个基本模板,我们建议 “时钟”游戏的开发策略为: 1、确定一组

憬暕空灵的博客 4901

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【亲测免费】 探索TM16xx:驱动LED与按键的神奇库

探索TM16xx:驱动LED与按键的神奇库 简介 TM16xx 是一个专为Arduino设计的库,用于控制基于TM1638、TM1637等芯片的LED和按键模块。它提供了一种简单的方法,使您能够像打印到显示器一样操作7段显示,并利用Adafruit GFX库在矩阵显示屏上绘制图形。无论你是新手还是经验丰富的开发者,这个库都将是你实现LED创新项目的一把利器。 技术分析 TM16xx 库的核心在于其...

gitblog_00073的博客 834

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[蓝桥杯]神奇闹钟

​:通过精确的时间戳计算和UTC时区控制,确保闹铃时间计算的准确性。算法时间复杂度O(1),空间复杂度O(1),满足评测要求(最大运行时间1s,内存256M)。

qq_2937655951的博客 689

关于import和from xx import xx

一、关于导入模块 1在导入模块的一瞬间,解释其会先通过sys.modules来判断该模块是否已经导入了,True 则不再重复导入,False则会做三件事   1为导入的模块创立心的名称空间   2在心创建的名称空间中运行该代码中的代码   3创建模块的名字,并使用该名称空间作为该模块的当前模块中引用的名字 2关于 " __name__"=="__main__":   当我们把一个模块作...

weixin_30641465的博客 339

CSU-1974 神奇药水

CSU-1974 神奇药水 Description ​ 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸。 csuxushu是一名充满梦想的程序员,因此他也希望来参加暑期集训的ACM萌新们和他一样怀揣着书写CSU-ACM历史的梦想。 一个偶然的机会,他在机房的某个角落得到了一本来自远古神犇的药水...

weixin_30734435的博客 163

神奇的闹钟(算法题)

小蓝发现了一个神奇的闹钟,从纪元时间(19701970 年 11 月 11 日 00:00:0000:00:00)开始,每经过 xx分钟,这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。对于给出的任意一个格式为 уууу-MM-ddHH:mm:ssуууу-MM-ddHH:mm:ss 的时间,小蓝想要知道在这个时间点之前 (包含这个时间点) 的最近的一次闹铃时间是哪个时间?注意,你不必考虑时区问题。

m0_56053705的博客 1055

COJ1974-神奇药水

神奇药水Submit Page Summary Time Limit: 1 Sec Memory Limit: 256 Mb Submitted: 183 Solved: 38 Description 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸。

algzjh的博客 737

蓝桥杯 Python组-神奇闹钟(datetime库)

传送门: 0神奇闹钟 - 蓝桥云课​​​​​​小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 11 日 00:00:00)开始,每经过 x 分钟,这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。对于给出的任意一个格式为 уууу-MM-ddHH:mm:ss 的时间,小蓝想要知道在这个时间点之前 (包含这个时间点) 的最近的一次闹铃时间是哪个时间?注意,你不必考虑时区问题。输入格式输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。接下来依次描述

AuRoRamth的博客 2367

【bzoj1006】[HNOI2008]神奇的国度

1006: [HNOI2008]神奇的国度 Time Limit:20 SecMemory Limit:162 MBSubmit:3114Solved:1401[Submit][Status][Discuss] Description   K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是...

anzhi7214的博客 214

蓝桥杯比赛 python程序设计——神奇闹钟

python功能:使用datetime模块创建一个datetime对象start_time,其值为 1970 年 1 月 1 日 0 时 0 分,作为后续时间计算的起始点。

weixin_66547608的博客 968

神奇宝贝HTML游戏代码,口袋妖怪魂银金手指代码

口袋妖怪魂银金手指代码是一款全新口袋妖怪推出的RPG动作手游,全新的捕获体验,同是在这里大家可以更加完善的完成每一次的精灵捕获体验,玩法非常的轻松简单,大量不同的任务等待着你来解锁挑战,喜欢的小伙伴们快来下载吧。口袋妖怪魂银金手指代码玩法:默默无闻的主角是一名来自若叶镇的新人神奇宝贝训练家。游戏伊始,主角需要在空木博士提供的三只初学者神奇宝贝菊草叶、小锯鳄和火球鼠中选择一只作为搭档。在应空木博士要...

weixin_36079387的博客 2496

不能为了xx而xx

不能为了xx而xx是一句很神奇的话。它总是提醒你目的和手段不能是同一个东西。 不能为了赚钱而赚钱,所以我们需要寻找赚钱之外的意义。每个人都有自己的答案,但是无论如何,当手段有了一个目的作为指引,行为方面就会有所警惕,有了一种前瞻性。 这几天碰到很多具体的细节问题,同样可以套用这句话: 不能为了美观而美观,这几天着实花了时间在诸如颜色搭配上,结果细节也许不错,但是整体上却又有些不协调...

ansion2014的博客 361
上一篇: gdb 环境配置
下一篇: 【转】linux:write调用的原子性
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值