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泛型编程开始之前,... 阅读详情

相关推荐

TEM图像处理实战指南:从基础操作到金属材料分析

本文提供了一份全面的透射电镜(TEM)图像处理实战指南,涵盖从基础操作到金属材料深度分析的全流程。重点讲解了TEM图像预处理、选区电子衍射(SAED)标定、高分辨像(HRTEM)分析及STEM图像应用等核心技能,并结合金属材料(如铝合金、钢)的析出相鉴定、位错分析和界面结构研究等实际案例,帮助研究者从原始数据中准确提取晶体结构、缺陷及成分信息。

weixin_29284201的博客 211

[翻译]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

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

关于C之泛型

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

itzyjr的专栏 1981

第五章 PCIe介绍 5.1-5.7

为什么SSD要用PCIe接口?因为它快,比SATA快。通道,PCIe最多可以有32个通道。两个设备之间的PCIe连接,叫做一个Link。如下图,设备A和设备B是个双向连接,两个PCIe设备之间,有专门的发送和接收通道,数据可以同时往两个方向传输,PCIe Spec称这种工作模式为,可以理解为。和PCIe一样,SATA有独立的发送和接收通道。但与PCIe工作模式不一样,同一时间,SATA只有一条通道可以进行数据传输。这种工作模式称为。与SATA单通道不同,PCIe连接可以通过增加通道数扩展带宽。

fengbaobaola的博客 2969

IEEE论文接收后,收到Proof邮件别慌!手把手教你48小时内搞定校样(附详细截图)

本文详细解析了IEEE论文接收后Proof校样的全流程,从邮件关键信息解码到精准修改标注,提供48小时内高效完成校样的实战指南。涵盖登录技巧、文件验证、修改标注黄金法则及九宫格检查清单,帮助作者避免常见错误,确保论文顺利发表。

weixin_30652491的博客 563

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

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

robertzhouxh的专栏 1037

华硕三频万兆分布式路由组网实战:从AiMesh 2.0到全屋Wi-Fi 6覆盖

Mesh组网是解决大户型Wi-Fi覆盖难题的主流方案,其核心原理是通过多个节点构建网状网络,实现设备间的无缝漫游。在技术层面,Wi-Fi 6标准、三频设计(包括专属回程频段)和有线回程等技术,共同提升了网络的带宽、稳定性和抗干扰能力。这些技术的工程价值在于,能够为多设备并发、高带宽应用(如4K/8K流媒体、在线游戏、内网文件高速传输)提供可靠支撑。具体到应用场景,例如利用华硕AiMesh 2.0系统,配合三频万兆分布式路由器,可以实现智能的设备连接与负载均衡。通过合理规划节点位置、优先采用有线回程,并进行Q

weixin_34054866的博客 433

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

使用宏实现的简单泛型队列 /* * 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

告别JavaScript!C#通过WebAssembly在浏览器中实现“原生级“性能

C# + WebAssembly:前端开发的革命性替代方案 摘要:本文探讨了C#通过WebAssembly取代JavaScript开发前端应用的新趋势。文章分析了JavaScript的局限性(弱类型、回调地狱等),并详细介绍了C#+WebAssembly组合的优势:强类型系统、高性能、多线程支持和代码重用。技术实现方面,阐述了C#通过Mono/.NET编译为WebAssembly字节码的原理,重点介绍了Blazor框架的两种模式。文章还提供了实战指南,包括项目创建、多线程配置,以及一个与ChatGPT AP

墨夶的博客 946

Android系统内存和性能关系的调研

摘要:本文分析了低内存导致性能问题的判断方法和评估思路。通过监控/proc/vmstat中的allocstall_normal、pageoutrun等指标可判断内存回收频率,当MemFree、MemAvailable和Cached均低于500MB时可能出现明显卡顿。全文通过实验和理论验证分析,回答因内存瓶颈导致性能问题的一些分析和解决的思路。

jidapenglin28的专栏 131

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

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

wcm_lucky的博客 377

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2206

C语言与堆栈的理解

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

weixin_42031299的博客 4326

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

Hackbuteer1的专栏 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

泛型编程与STL

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

touzani的专栏 5757

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

用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、付费专栏及课程。

余额充值