C语言中用宏设计的"泛型"堆栈

[C51]RAM开销及堆栈大小,keil工具 那么问题来了,如果程序比较大,设置的变量很多,那么可用于堆栈的内存是不是变得很小,答案是肯定的,但是可以通过将变量存放在外部RAM,避免内部RAM被过度使用,可以通过data xdata关键字来自己分配,也可以将keil配置成默认使用外部RAM(前提是具有外部RAM)可以看到堆栈往后移动了一位,但是对C语言熟悉的会发现一个问题,就是b不是动态局部变量吗,那么根据C语言的标准,b应该是创建在堆栈中,随着函数的结束释放掉,但是这里的b占用的是固定的地址,这个先不写了,有兴趣的可以看看下面的文章。 阅读详情

每次项目当要用到堆栈时要么会重新写个要么把以前的拷贝过来换个类型,一直在想能不能用C语言做个通用的数据结构库,像C++中的STL一样。要在C语言突破类型的限制以我目前的知识水平能想到的用宏了,后来查到了#define中##的用法。后来就产生了下面这段代码:

 

由于C语言中的变量需要在首部声明(文件,函数,代码块首部),所以用花括号解决了任意处申明的问题,但p_stack宏必须紧跟在_p_start宏后,而且每个_p_start宏必须有个对应的_p_end宏。具体用法如下:

 

后来考虑到__p_start不能带;号与C语言语法有点冲突,改进如下:

用法如下:

 

每个堆栈的作用域在p_stack_start和p_end之间,目前这个还有个小bug就是关于p_top的返回如果是int型的,那么返回0就有可能和堆栈里面的数据值一样不能识别了。目前能想到的也只有此了,刚还做了个同样的队列,对于链表这个还没想好,而且也不太合适,主要是链表的代码更复杂直接用宏的话太牵强了,如果大家有更好的方法也可以共享一下。

泛型Lambda,如此强大! 最近发现泛型编程有了另一利器——泛型Lambda,比想象当中要强大许多,威力不小,和大家分享一下。本篇内容需要对泛型编程有所了解,若是读过之前更新的相关文章,食用更佳。1泛型编程开始之前,... 阅读详情

相关推荐

中文顶刊《会计研究》文本分析技术最新进展总结盘点

会计研究》是由中华人民共和国财政部主管、中国会计学会主办的国家一级学术期刊,为会计领域中文顶级期刊。随着大数据技术的日益成熟, 社交网络类文本 、上市公司披露类文本、媒体报道类文本、 其他类文本 、网络搜索数据、P2P 网络借贷文 本与分析师报告等文本数据逐渐成为财务会计的研究素材。

qq_52891550的博客 2893

[翻译]C#中的泛型 (From dotNet SDK 2.0 Beta1)

来源:Mircrosoft.NET 2.0 Beta1 SDK翻译:Jim Xu日期:2004-11-2  泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数

航海日志---Jim Xu的专栏 3111

基础知识学习 -- qnx 系统

qnx os车载系统

求变,从思想开始 3876

关于C之泛型

C11新增了一种表达式,叫作泛型选择表达式。 在程序设计中,泛型编程(generic programming)指那些没有特定类型,但是一旦指定一种类型,就可以转换成指定类型的代码。例如,C++在模板中可以创建泛型算法,然后编译器根据指定的类型自动使用实例化代码。在C中这个功能是C11版本才具有的,可根据表达式的类型(即表达式的类型是int、double 还是其他类型)选择一个值。泛型选择表达式不...

itzyjr的专栏 1981

Android HCE模拟NFC标签:实现跨设备NDEF数据共享

本文详细介绍了Android HCE技术如何模拟NFC标签实现跨设备NDEF数据共享。通过核心代码实现和标准AID配置,使手机能够被第三方NFC应用直接读取,支持文本、网址、Wi-Fi配置等多种数据类型,大幅提升设备间数据交换的便捷性和兼容性。

pytorch8learner的博客 249

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何使用Python爬虫快速抓取东方财富网的股票数据,包括环境配置、API分析、核心代码实现及优化技巧。通过简单的requests和pandas库,5分钟内即可获取高质量股票数据,适合量化交易和数据分析初学者。

weixin_29040367的博客 1185

Linux 内核中的 GCC 特性---泛型宏

GCC 和 Linux 是出色的组合。尽管它们是独立的软件,但是 Linux 完全依靠 GCC 在新的体系结构上运行。Linux 还利用 GCC 中的特性(称为扩展)实现更多功能和优化。本文讨论一些重要的扩展,讲解如何在 Linux 内核中使用它们。 GCC 当前的稳定版本(版本 4.3.2)支持 C 标准的三个版本: International Organization for

robertzhouxh的专栏 1037

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1729

使用宏实现简单的泛型队列

使用宏实现的简单泛型队列 /* * Jan. 26, 2019. * * Title: * * 使用 C99 及宏实现的简单泛型队列。 * * Demo: * * queue_t(int) *fq = new_queue(int, 8); * * const int arr[] = {1, 2, 3, 4, 5, 6, 7, 8}; * for (in...

吴雨馨的博客 579

【100%通过率】华为OD机试真题 Java&Go 实现【水库蓄水问题】【2022.11 Q4 新题】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 1万+

竞赛经验——挑战杯、互联网加、北斗杯、微软创新杯、计算机设计等比赛教训与经验

最近参加一些比赛,北斗杯、挑战者杯、微软创新杯等比赛,每次比赛都有不少需要总结的地方,特别是项目展示上技巧很多,总结一下。 首先最重要的是作品自身硬!自身的作品完成度不高,或者是没有创新点,就没必要参加了。 比如是出去比赛的话,我反正每次碰到最多的是智慧农场、智慧家居之类,不知道为啥这种的太多了。如果是创业型比赛,评委基本会问小米已经做得很好了很便宜了,你的优势在哪里?这些都是常见的问题提前要...

沉迷单车的追风少年 7329

C语言泛型实现抽象数据类型(ADT:abstract data type)之泛型堆栈

泛型:泛型是编写一组函数,但是数据的类型暂时可以不确定的能力。这组函数随后用用户需要的不同类型进行实例化或创建。 C语言并没有提供这种能力,泛型思想被提出的时间的比C语言的设计晚很多,但是我们可以用define模拟这种机制。 下面是一个用静态数组实现的泛型堆栈,数组的长度当堆栈实例化时作为参数提出 #include <assert.h> //定义一个宏,其中SUFFIX是...

wcm_lucky的博客 377

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

C语言与堆栈的理解

C语言和堆栈的联系: C语言和栈:必须要先给C语言分配一个可用的栈空间,C语言才能运行,因为C语言里的临时变量都是放在栈空间里的,没有栈C语言是无法运行的。 C语言和堆:堆空间就是我们申请的内存空间,用malloc函数申请的。C语言中当想要使用内存时就可以向堆区申请,但是使用时要注意及时释放不用的内存,以免造成内存泄漏。 堆和栈的理解:完全不同的两个概念 栈:栈是一种数据结构(先进先出),栈空间由系统管理,不需要申请和释放,C语言里的临时变量会自动放到栈里,压栈和弹栈都不需要程序员操心。 堆:堆是一种特殊的

weixin_42031299的博客 4326

老版QQ原生表情gif动态

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C 语言的可变参数表函数的设计

首先在介绍可变参数表函数的设计之前,我们先来介绍一下最经典的可变参数表printf函数的实现原理。 一、printf函数的实现原理 在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机的内存中,数据有2块,一块是堆,一块是栈(函数参数及局部变量在这里),而栈是从内存的高地址向低地

Hackbuteer1的专栏 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

泛型编程与STL

泛型编程(generic programming通用编程/类属编程)和面向过程以及面向对象一起,是混合型程序设计语言C++所包含的三种编程风范(paradigm范例/范型)。传统C++的泛型编程,仅仅局限于简单的模版技术。标准C++新引入了容器(container)、迭代器(iterator)、分配器(allocator)和STL(Standard Template Library标准模板库)

touzani的专栏 5757

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

用C 语言编写程序模拟堆栈

//本人所作博客为学习复习所用,如有不对之处还望指出 程序设计题目要求: 编写一个程序模拟堆栈,要求能够模拟、入栈、出栈等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素。 思路:该题涉及部分简单数据结构的知识——堆栈。我的思路是:用数组来表示栈,然后用一个指向栈顶的指针,通过自增自减来实现堆栈中元素的操作。并且与用户进行交互来决定接下来的操作是入栈、出栈还是退出程序。 代码如下: /* * 堆栈:一端固定,一端浮动 * 所有数

AntonioZC666的博客 3330

android 集成同一interface不同泛型_泛型和元编程的模型:Java, Go, Rust, Swift, D等

在程序设计的时候,我们通常希望使用同样的数据结构或算法,就可以处理许多不同类型的元素,比如通用的List或只需要实现compare函数的排序算法。对于这个问题,不同的编程语言已经提出了各种各样的解决方案:从只是提供对特定目标有用的通用函数(如C,Go),到功能强大的图灵完备的通用系统(如Rust,C++)。在本文中,我将带你领略不同语言中的泛型系统以及它们是如何实现的。我将从C这样的不具备泛型系统...

weixin_39628186的博客 126

C5:为C和CLI打造的强大泛型集合库

C5是一个为C#编程语言和CLI(Common Language Infrastructure)设计的泛型集合库。它提供了丰富的经典数据结构、强大的功能、最佳的渐进时间复杂度、详尽的性能文档以及经过严格测试的实现。C5的目标是成为C#和CLI平台上功能最强大、效率最高、质量最好的泛型集合库,其功能和设计远超其他类似平台的标准库。 ## 项目技术分析 ### 核心技术 - **泛型支持**:C...

gitblog_00013的博客 532

泛型和元编程

含义 泛型:Generic Type.泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。 元编程:编写可以生成其他程序的程序。 意义 让算法或程序逻辑更为通用,可用于不同的数据类型 增强类型安全,在编译期保证类型安全,添加类型约束,减少强制转换的次数 实现方式 装箱 单态化 基础装箱 List中能装各种不同类型的数据。 List v = new ArrayList(); v.add("Hello"); v.add("World"); 使

HelloMagina的博客 1094

Java编程思想__泛型(一)

一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类。如果要编写可以适用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 在面向对象编程语言中,多态是一种泛化机制。 JavaSE5 的重大变化之一: 泛型的概念。泛型实现了参数化类型的概念,使代码可以应用于多种类型。泛型 这个术语的意思是 : 适用于许多许多的类型。 如果你了解其他语言(例如C++) 中的参数化类型机制,你就会发现,有些以前能够做到的事情,使用Java泛型机制缺无法做到。使用别人构建好的泛型类型相当容易。但是如果你

NULL 566

泛型编程

<br />泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic

xuanxiaoala的专栏 608

7.请解释泛型list集合的长度为什么动态的?_泛型和元编程的模型:Java, Go, Rust, Swift, D等...

在程序设计的时候,我们通常希望使用同样的数据结构或算法,就可以处理许多不同类型的元素,比如通用的List或只需要实现compare函数的排序算法。对于这个问题,不同的编程语言已经提出了各种各样的解决方案:从只是提供对特定目标有用的通用函数(如C,Go),到功能强大的图灵完备的通用系统(如Rust,C++)。在本文中,我将带你领略不同语言中的泛型系统以及它们是如何实现的。我将从C这样的不具备泛型系统...

weixin_39805255的博客 95

c语言之堆栈溢出问题

1.函数的调用,系统所作的工作 2.函数调用时与内存管理 3.递归函数 4.数组作为形参调用函数时,为什么需要连同数组长度一起传进来

freeline的博客 3377

C3编程语言中国社区正式成立,诚邀所有C系开发者加入!

C3编程语言中国社区正式成立,成为国内首个获得官方授权的C3语言交流平台。C3作为C语言的进化版,保留C的高效特性同时解决了其安全性和模块化等痛点,与C完全ABI兼容,适合系统开发。相比Zig语言的激进革新路线,C3采用温和改良策略,更易上手。社区将提供官方资源、技术交流和学习资料,推动C3在国内的应用发展。欢迎C系开发者加入QQ群239537011,共同参与生态建设。

Zarek枫煜的博客 895
上一篇: 由MMX优化联想到的
下一篇: 在Lua脚本中使用OpenGL函数
YellowBug
博客等级 码龄18年 6粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值