`

为什么用纯c写一个通用的容器非常难?

    博客分类:
  • c
 
阅读更多

Writing a generic container in pure C is hard, and 

it’s hard for two reasons:

1. The language doesn’t offer any real support for encapsulation or 

information hiding.  That means that the data structures expose 

information about internal representation right there in the interface 

file for everyone to see and manipulate.  The best we can do is 

document that the data structure should be treated as an abstract 

data type, and that the client shouldn ’t directly manage the fields.  

Instead, he should just rely on  the functions provided to manage the 

internals for him.

2. C doesn’t allow data types to be  passed as parameters.  That means 

a generic container needs to manually manage memory in terms of 

the client element size, not client  data type.  This translates to a 

bunch of malloc, realloc, fr ee, memcpy, and memmove calls 

involving void *s.  This is the  very type of programming that makes 

C difficult.

分享到:
评论

相关推荐

    通用红黑树(Tree-Map)容器纯C实现

    纯C实现的通用红黑树容器不好找,于是自己琢磨着实现了一个。 算法部分直接剪裁自Linux内核中的rbtree 作者主要是在此基础上封装了一个通用的容器 里面含有 test例子 以及 benchmark基准测试 另外这个是Windows和...

    纯C泛型容器

    但是,对于需要在C语言环境中实现通用容器的场合,这是一个非常实用的解决方案。 总结来说,"纯C泛型容器"是利用void指针在C语言中实现的一种泛型概念,通过结构体和自定义函数来管理和操作不同类型的元素。这种...

    mlib:使用纯C语言(C99或C11)的通用容器和类型安全容器的库,用于容器的广泛收集(与C ++ STL比较)

    `mlib`是一个针对C语言(支持C99或C11标准)设计的库,提供了丰富的容器和类型安全的数据结构,旨在为C程序员提供类似于C++标准模板库(STL)的功能。这个库的目的是简化C编程中的数据管理,提高代码的可读性和效率...

    list,queue 纯C语言 简洁实现

    本文将深入探讨两个经典数据结构——列表(List)和队列(Queue),它们都是用纯C语言实现的,并且具有简洁和通用的特点。这些源代码可以在C/C++的各种编译器上运行,为开发者提供了便利。 首先,我们来解析“list...

    c语言实现的手动封装mp4

    3. **Box的四字节标识符**:每个Box都由一个四字节的标识符,如"ftyp"代表文件类型,"moov"代表电影头部,"mdat"代表媒体数据。 4. **Movie Header Box (mvhd)**:包含整个文件的元信息,如时间尺度、时间戳等。 5...

    机器学习ID3分类算法实现(c++语言和c语言版本)

    在分类问题中,如果一个数据集所有样本都属于同一类别,那么它的信息熵为0,表示非常纯;反之,如果各类别样本均匀分布,信息熵最大,表示数据集非常混乱。计算公式为:`H(D) = -∑(p(i) * log2(p(i)))`,其中D是...

    C与C++常用实例

    例如,你可以创建一个通用的排序函数,对整型、浮点型甚至是自定义类型的数据都能进行排序。 文件" C++ "很可能包含了一些C++的实际代码文件,展示了面向对象编程的各个方面,以及可能使用的一些高级特性,如模板、...

    C/C++ interview questions

    这类类充当了一个通用的持有者,它拥有预定义的行为和一个众所周知的接口。容器类的作用之一是隐藏用于维护内存中对象列表的拓扑结构。 **类型:** 根据容器所持有的对象是否相同,可以将容器分为两大类: 1. **...

    2013-2020年河北工程大学806C、C++语言程序设计考研真题

    《2013-2020年河北工程大学806C、C++...河北工程大学806语言程序设计的历年真题,无疑为考生提供了一个检验和巩固所学知识的宝贵平台,帮助他们在实际问题解决中提升编程技能,为未来的学习和职业生涯奠定坚实的基础。

    java面试题

    为什么每次请求都要创建一个Action对象? 答:Struts2每次请求的时候都会创建一个action实例,这样会保证线程的安全。Struts1只是在第一次请求的时候创建一个action实例,以后每次相同的请求都直接从内存中去读取,...

    Gumbo使用指南(Qt版).pdf

    Gumbo是一个用纯C语言编写的HTML5解析库,它实现了HTML5的解析算法,并且作为一个构建块(building block),可以用于构建错误检查工具、验证器、模板语言以及重构和分析工具。Gumbo无需外部依赖,且遵循C99标准。 ...

    (word完整版)C++语言第一课.doc

    另外,Borland C++ Builder X是一个跨平台的IDE,特别适合C++的跨编译器开发,其纯C++的框架和GUI设计器为开发者提供了更多便利。 总的来说,C++是一种强大而灵活的编程语言,其丰富的库和模板机制为开发者提供了...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    effective stl stl 技巧

    #### 条款29:需要一个一个字符输入时考虑使用istreambuf_iterator - **核心概念**:`istreambuf_iterator`适用于逐字符读取输入流。 - **应用场景**: - 在处理文本输入时,使用`istreambuf_iterator`可以简化...

    freemarker总结

    运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false ########################### 最常用的概念 1、 scalars:存储单值 字符串:简单文本由单或双引号括起来。 数字:...

    前端面试题

    **10、用纯CSS创建一个三角形的原理是什么?** - 通过设置`border`和透明边框,利用边框宽度和颜色的不同来创建三角形效果。 **11、一个满屏品字布局如何设计?** - 可以通过使用`display: flex`或`display: grid`...

    python面试题

    我们为什么要使用它们? - **`*args`**: 收集所有未命名的位置参数为一个元组。 - **`**kwargs`**: 收集所有命名的关键字参数为一个字典。 使用它们可以让函数更加灵活,能够接收任意数量的参数。 #### 57. 下面...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics