⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c&c++ young library +

📁 一个类STL的多平台可移植的算法容器库,主要用于嵌入式系统编程时的内存管理等方面
💻
📖 第 1 页 / 共 2 页
字号:
    这一篇将介绍如何将程序库移植到不同的平台和编译器上。程序库是用标准C和C++来
编写的,理论上是不应该存在移植的问题的,但是由于各个编译器厂家对标准C和C++(尤
其是C++)支持的程度大不相同,所以了解如何移植是很有必要的。以下内容适用于0.8.4
以上的版本。


    **2.1**
    youngc程序库的移植。


    *2.1.1*
    要使youngc程序库能顺利编译,编译器至少要满足:
    1、支持标准的函数指针;
    2、支持除法运算。
    我在使用KEIL C51编译的时候,就是由于编译器无法很好的支持函数指针以及不支持
除法运算,导致编译失败。


    *2.1.2*
    ylib-$(VERSION)/young/youngc.h 包含有 youngc 库中所有的头文件,直接包含该文
件会简单很多($(VERSION)表示版本号,下同)。下面列出 youngc 子库中各个文件的功能
及其依赖关系:
-------------------------------------------------------------------------------
      文件名                       功能                      包含文件
-------------------------------------------------------------------------------
    yc_configuration.h        youngc程序库条件编译宏设置文件           无
    yc_definition.h    youngc程序库常量、宏、类型定义文件    stddef.h
                                                             limits.h
                                                             yc_configuration.h
    yc_memory.h        存储函数声明                          yc_definition.h
    yc_memory.c        存储函数实现                          stdio.h
                                                             stdlib.h
                                                             yc_memory.h
    yc_memalgo.h       memory类型通用算法声明                yc_definition.h
    yc_memalgo.c       memory类型通用算法实现                yc_memalgo.h
    yc_rscalgo.h       resource类型通用算法声明              yc_definition.h
    yc_rscalgo.c       resource类型通用算法实现              yc_memalgo.h
                                                             yc_rscalgo.h
    yc_dymemarr.h      动态memory类型数组的声明              yc_definition.h
    yc_dymemarr.c      动态memory类型数组的实现              yc_memalgo.h
                                                             yc_dymemarr.h
    yc_dyrscarr.h      动态resource类型数组的声明            yc_definition.h
    yc_dyrscarr.c      动态resource类型数组的实现            yc_memalgo.h
                                                             yc_rscalgo.h
                                                             yc_dyrscarr.h
    yc_dblnklst.h      双向循环链表的声明                    yc_definition.h
    yc_dblnklst.c      双向循环链表的实现                    yc_memalgo.h
                                                             yc_dblnklst.h
    yc_sglnklst.h      单向链表的声明                        yc_definition.h
    yc_sglnklst.c      单向链表的实现                        yc_memalgo.h
                                                             yc_sglnklst.h
    yc_chkarray.h      数据块阵列的声明                      yc_definition.h
    yc_chkarray.c      数据块阵列的实现                      yc_memalgo.h
                                                             yc_chkarray.h
    yc_bbstree.h       平衡二叉查找树的声明                  yc_definition.h
    yc_bbstree.c       平衡二叉查找树的实现                  yc_memalgo.h
                                                             yc_bbstree.h
    yc_hashtable.h     散列表的声明                          yc_definition.h
    yc_hashtable.c     散列表的实现                          yc_memalgo.h
                                                             yc_hashtable.h
    yc_string.h        动态字符串的声明                      stdio.h
                                                             yc_definition.h
                                                             yc_dymemarr.h
    yc_string.c        动态字符串的实现                      wchar.h(支持宽字符串时需要)
                                                             wctype.h(支持宽字符串时需要)
                                                             ctype.h
                                                             float.h
                                                             string.h
                                                             stdarg.h
                                                             yc_memory.h
                                                             yc_memalgo.h
                                                             yc_string.h
    yc_function.h      辅助函数的声明                        yc_definition.h
    yc_function.c      辅助函数的实现                        limits.h
                                                             math.h
                                                             float.h
                                                             string.h
                                                             yc_function.h
    yc_algorithm.h     通用算法的声明                        yc_memalgo.h
                                                             yc_rscalgo.h
    yc_algorithm.c     通用算法的实现                        yc_algorithm.h
-------------------------------------------------------------------------------


    *2.1.3*
    youngc子库的移植主要由yc_configuration.h中定义的条件编译宏来完成控制,定义的宏及其
含义如下:

    1、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_STANDARD_MEMORY_FUNCTION__
    若编译器附带的标准库支持memcpy、memmove、memset函数则定义该宏。该宏主要用于
控制yc_memalgo.h中的ylib_memcopy、ylib_memmove、ylib_memset函数,如果该宏定义,
则这三个函数被定义为宏,分别调用memcpy、memmove、memset函数;如果使用者想使用自
己实现的效率更高的相应功能的函数,则可以禁止定义该宏,并在yc_memalgo.c中分别实现
ylib_memcopy、ylib_memmove、ylib_memset函数。

    2、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_IO_SYSTEM__
    若编译器支持C语言标准库的IO系统,则定义该宏。该宏主要用于控制yc_string.h、
yc_string.c中的动态字符串与IO的交互。

    3、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_FILE_SYSTEM__
    若编译器支持C语言标准库的文件系统,则定义该宏。该宏主要用于控制yc_string.h、
yc_string.c中的动态字符串与文件的交互。

    4、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_C95_WIDE_CHARACTER__
    若编译器及附带的标准库支持ISO C95标准定义的宽字符功能,则定义该宏。该宏主要
用于控制yc_string.h、yc_string.c中的动态宽字符串的声明与实现。

    5、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_BOOLEAN_TYPE__
    若编译器支持bool类型,则定义该宏。如果编译器支持ISO C99标准,或者使用C++编
译器编译,或者编译器扩展了对该功能的支持,均可以在yc_configuration.h中定义该宏。

    6、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_INLINE_FUNCTION__
    若编译器支持内联函数,则定义该宏。如果编译器支持ISO C99标准,或者使用C++编
译器编译,或者编译器扩展了对该功能的支持,均可以在yc_configuration.h中定义该宏。

    7、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_LONG_LONG_TYPE__
    若编译器支持long long类型,则定义该宏。在ISO C99中,long long被定义为不小于
64位的整数,如果编译器支持ISO C99标准,或者编译器扩展了对该功能的支持,均可以在
yc_configuration.h中定义该宏。

    8、__MACRO_C_YOUNG_LIBRARY_COMPILER_SUPPORT_VARIABLE_LENGTH_ARRAY__
    若编译器支持变长数组,则定义该宏。如果编译器支持ISO C99标准,或者编译器扩展
了对该功能的支持,均可以在yc_configuration.h中定义该宏。


    *2.1.4*
    使用建议:
    如果需要在工程中使用youngc程序库,可以将youngc目录下的文件全部加入工程进行
编译,也可以只将需要用到的文件加入工程进行编译,但是需要注意文件之间的依赖关系,
可以参看2.1.2列出的程序库文件表。
    在Linux、Unix下,可以将程序库编译成静态库或共享库;在Windows下,可以将程序
库编译成动态链接库,只是需要修改头文件中函数的声明和.c文件中相应函数的声明。
    如果在无操作系统支持的嵌入式系统上使用的话,建议yc_memory.*不要使用。如果
硬件平台不支持浮点数的话,则散列表无法使用。如果编译器附带的标准库对float.h不
能完全支持的话,则yc_function.c可能会无法通过编译。
    需要注意的是对动态字符串的使用,从上面的文件依赖关系可以看到yc_string.*对

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -