1.C&DataStructure引言
使用过C++ <STD> 库的猿友们应该都觉得 C++中那些已经实现好了的数据类型封装使用让人很是舒服;
例如 vector 支持自动扩充数组,支持模板类,任何数据类型都可以 简单的管理,如果在C语言中,我们就
需要预先声明数组或者动态声明指针,最最重要的是,同样的事情我们有可能需要做很多遍,那么有没有什么
方式可以让C语言也可以实现类似C++中数据类型的功能呢?
答案当然是可以的,不仅可以实现自动管理数组,同时还支持代码膨胀,也就是支持自定义的数据类型
(无限嵌套哦);
笔者我就想编写这么一个系列,一来是记录我自己“造轮子”的过程,二来是为了分享,让大家都可以使用,
免得大家重复造轮子;
编码风格(约定|声明)
1.每一个数据类型模块文件命名都是以 c****.c/.h命名;例如vector模块 那么文件名为:cvector.c/.h
2.每一个模块都会有单独的文件前缀;例如 在cvector模块中,所有函数前缀统一为VCT(VeCTor)
3.每个模板函数都会在前标注其功能以及注意事项;
4.推荐使用VSCode进行编辑编码;
5.由于其特性,请使用支持C99以上的编译器编译;
实现原理
宏定义实现代码膨胀;
大家都知道宏定义的作用就是在使用宏的位置展开宏;并且不检查类型等直接使用;(Eg1)
同时宏还可以使用##拼接符和#字符化符号来完成编译器基本的字符处理(等效于插入代码);(Eg2)
我们的代码膨胀功能的实现就是基于这个特性来完成的;
typedef struct 实现数据结构的实现;
这个应该是个入门知识,我就不过多赘述;
Eg.1
#define PI 3.14 double getCircleArea(double radius)
{
// return radius * radius * 3.14
return radius*radius*PI;
} // (Eg1)
Eg.2
// Eg .2
#include<stdio.h>
#define PRINTF_NUM(NUM) printf("%s = %d",#NUM,NUM) void main(void)
{
int number = ; // printf("%s = %d","number",number);
PRINTF_NUM(number);
}
目录
1.引言
3.2 C语言_实现数据容器set(基础版)
4 C语言_实现简单基础的map
1.C&DataStructure引言的更多相关文章
- 【翻译】MongoDB指南/引言
[原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...
- Kafka 文档引言
原文地址:https://kafka.apache.org/documentation.html#semantics 1.开始 1.1 引言 Kafka是一个分布式,分区队列,冗余备份的消息存储服务. ...
- HMM 自学教程(一)引言
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- 【DataStructure In Python】Python实现各种排序算法
使用Python实现直接插入排序.希尔排序.简单选择排序.冒泡排序.快速排序.归并排序.基数排序. #! /usr/bin/env python # DataStructure Sort # Inse ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- 【DataStructure In Python】Python模拟链表
最近一直在学习Python和Perl这两门语言,两者共同点很多,也有不多.希望通过这样的模拟练习可以让自己更熟悉语言,虽然很多时候觉得这样用Python或者Perl并没有体现这两者的真正价值. #! ...
- 引言:Canvas绘图API快速入门
引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...
- SQL Server 性能调优培训引言
原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...
- Java反射——引言
Java反射——引言 原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它 ...
随机推荐
- Ubuntu系统添加用户权限
一.首先创建一个新用户: sudo adduser hadoop 其次设置密码: sudo passwd hadoop 如果无法使用root密码,请输入如下命令: sudo passwd root 二 ...
- JWT与Session的比较
如今,越来越多的项目开始采用JWT作为认证授权机制,那么它和之前的Session究竟有什么区别呢?今天就让我们来了解一下. JWT是什么 定义 JSON Web Token(JWT)是一个开放标准(R ...
- Android Q 正式命名为 Android 10
根据官方博文,谷歌已经公布了 Android Q 的名称,它并不是想以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10. 该公司表示,它正在改变其发布版本的 ...
- jar包运行出现中文乱码的问题
写了一个java Project,在eclipse里运行的时候不会出现乱码,但是用jar包运行的时候,出现了中文乱码. 我将它包装成了一个文件,这样就在没有jre的机器上也可以运行了.start.ba ...
- .Net基础篇_学习笔记_第六天_类型转换和方法(函数)简介
类型转换:Convert.ToInt32(); int.Parse(); int.TryParse(); Convert.ToInt32(); 的本质就是在使用 int.Parse(); int. ...
- Airflow: TypeError can't pickle memoryview objects
apache-airflow1.9.0 + python3 + rabbitmq + librabbitmq2.0.0 相关配置如下: broker_url = amqp://cord:123456@ ...
- java基本数据类型与引用类型
基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~3 ...
- 01 jvm学习过程概述
声明:本博客仅仅是一个初学者的学习记录.心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流.一起学习.一起进步的朋友可以加我微信Liu__66666666 这是简单学习一遍之 ...
- SpringBoot——Web开发(静态资源映射)
静态资源映射 SpringBoot对于SpringMVC的自动化配置都在WebMVCAutoConfiguration类中. 其中一个静态内部类WebMvcAutoConfigurationAdapt ...
- JavaScript之基本语句
前面的内容记录了JavaScript的一些基本概念,本次主要讲解一下JS中常用的语句. 和大多数其他编程语言一样,JS也主要包括:选择.循环.错误检测.函数等.JS的语句基本是由值.运算符.表达式.关 ...