C++ 项目成长 ——自定义数据类型,定义各种类型别名, typedef的部分用法实例

27 篇文章 0 订阅
16 篇文章 0 订阅

自定义数据类型,定义各种类型别名, typedef的部分用法实例

概要

     书接上回,项目开始定义了一些系统的平台参数,具体可参见下面的文章:C++ 项目成长 —— 定义跨平台的参数宏的文件记录

     同时,在上次我们尝试去定义了一些编译选项自定义的宏,来控制不同的编译选项的时候,能够做一些区分,具体可以参考下面的文章:C++ 项目成长 —— 自定义编译参数宏,区分编译选项

     那么今天,我就想要来说道说道,如何来定义自己的类型,如果你希望在自己的项目里面,能够在编译的时候,或者提供SDK的时候,能够对外暴露的仅仅是自己定义的类型,或者改成一个别名来隐藏一些你希望隐藏的代码时,那么我们就需要用到今天进行的参数类型的定义,看看是怎么做的吧。

TZOpenTools

zsofts_types.h


///
// Copyright (c)2020, Tom Zhao personal. ("TZOpenTools")
// This software is a personal tools project by Tom Zhao.
// Description:
///


#ifndef __TZ_SOFTS_TYPES_H_INCLUDE__
#define __TZ_SOFTS_TYPES_H_INCLUDE__

#include "zsofts_platform.h"
#include "zsofts_compiler_specific.h"

// include limits and some types definitions.
#include <limits.h>
#include <stddef.h>
#include <tchar.h>
#include <stdint.h>

#if         USHRT_MAX == 0xFFFFU
#define TZ_SIZEOF_SHORT 2
#else
    #error "Unsupported short size!\n"
#endif // #if         USHRT_MAX == 0xFFFFU

#ifdef __LP64__
#define TZ_SIZEOF_LONG 8
#else
#define TZ_SIZEOF_LONG 4
#endif // __LP64__

#if             TZ_ARCHITECURE_BIT == TZ_ARCHITECTURE_BIT64
#define TZ_SIZEOF_POINTER 8
#elif           TZ_ARCHITECURE_BIT == TZ_ARCHITECTURE_BIT32
#define TZ_SIZOF_POINTER 4
#else
    #error "Unsupported architecture bit!\n"
#endif // TZ_ARCHITECURE_BIT == TZ_ARCHITECTURE_BIT32

#if     (defined(WIN32) || defined(WIN64))
#define TZCHAR_IS_INT16LE 1
#else
#define TZCHAR_IS_INT16LE 0
#endif

typedef void* RTContext;    // Running time context, refers to fiber or coroutine.
typedef int8_t						TZINT8;
typedef uint8_t                     TZUINT8;
typedef int16_t                     TZINT16;
typedef uint16_t                   TZUINT16;

// long is not recommended when crossing platforms.
// But we define TZINT32 as long in Win32 for compatibility.
#if     TZ_SIZEOF_LONG == 8
    typedef int32_t                     TZINT32;
    typedef uint32_t                   TZUINT32;
#else
    typedef long                         TZINT32;
    typedef unsigned long         TZUINT32;
#endif

#ifdef TZ_WINDOWS
    typedef int64_t                     TZINT64;
    typedef uint64_t                   TZUINT64;
#else
    typedef __int64                     TZINT64;
    typedef unsigned __int64     TZUINT64;
#endif // TZ_WINDOWS

typedef float                         TZFLOAT32;
typedef double                     TZFLOAT64;

typedef char                           TZCHAR;
typedef wchar_t                      TZWCHAR;
typedef unsigned char           TZUCHAR;

#if TZ_BUILD_CHARACTERS == TZ_CHARACTERS_MBCS
typedef TZCHAR							TZTCHAR;
#define TZ__T(X)							X
#elif TZ_BUILD_CHARACTERS == TZ_CHARACTERS_UNICODE
typedef TZWCHAR                      TZTCHAR;
#define TZ__T(X)							L  ## X
#else
typedef TZCHAR							TZTCHAR;
#define TZ__T(X)							X
#endif
#define TZ_T(X)                            TZ__T(X)

typedef TZCHAR*                     TZPSTR;
typedef const TZCHAR*           TZPCSTR;

typedef TZWCHAR*                 TZPWSTR;
typedef const TZWCHAR*       TZPCWSTR;
typedef TZUCHAR*                  TZPMBSTR;
typedef const TZUCHAR*        TZCMBSTR;

typedef void*                           TZPVOID;
typedef const void*                 TZPCVOID;

#ifndef TZ_X64
    typedef __w64 long                  TZLONGPTR;
    typedef __w64 unsigned long  TZULONGPTR;
    typedef __w64 int                     TZINTPTR;
    typedef __w64 unsigned int     TZUINGPTR;
#else // TZ_X64
    #ifndef TZ_WINDOWS
        typedef int64_t                         TZLONGPTR;
        typedef uint64_t                       TZULONGPTR;
        typedef int64_t                         TZ_INTPTR;
        typedef uint64_t                       TZUINTPTR;
    #else
        typedef __int64                         TZLONGPTR;
        typedef unsigned __int64         TZULONGPTR;
        typedef __int64                         TZ_INTPTR;
        typedef unsigned __int64         TZUINTPTR;
#endif // TZ_WINDOWS

#endif // TZ_X64

typedef TZULONGPTR             TZADDRESS;

typedef unsigned char             TZBYTE;

#ifndef __LP64__
typedef int                                TZBOOL;
#else
typedef bool                             TZBOOL;
#endif // __LP64__

typedef short                            TZSHORT;
typedef int                                TZINT;
typedef long                             TZLONG;
typedef long long                     TZLLONG;
typedef unsigned short            TZUSHORT;
typedef unsigned int                TZUINT;
typedef unsigned long             TZULONG;
typedef unsigned long long     TZULLONG;

typedef TZUINT16                    TZWORD;
typedef TZUINT32                    TZDWORD;
typedef TZUINT64                    TZQWORD;

typedef float                             TZFLOAT;
typedef double                         TZDOUBLE;
typedef long double                 TZLDOUBLE;
typedef size_t                            TZSIZET;
typedef TZLONGPTR                 WindowId;

// Path
#define TZ_MAX_DRIVE 3
#define TZ_MAX_PATH 260
#define TZ_MAX_FNAME 256
#define TZ_MAX_DIR 256
#define TZ_MAX_EXT 256
#define TZ_BIG_MAX_FNAME 1024
#define TZ_MAX_FULL_PATH 4096

#define TZMIN(a,  b)				(((a) < (b)) ? (a) : (b))
#define TZMAX(a, b)				(((a) > (b)) ? (a) : (b))

#define TZBYTE_BIT CHAR_BIT
#define TZWORD_BIT (CHAR_BIT*sizeof(TZWORD))
#define TZDWORD_BIT (CHAR_BIT * sizeof(TZDWORD))
#define TZQWORD_BIT (CHAR_BIT * sizeof(TZQWORD))

#define TZBYTE_MAX ((TZBYTE)(-1))
#define TZWORD_MAX ((TZWORD)(-1))
#define TZDWORD_MAX ((TZDWORD)(-1))
#define TZQWORD_MAX ((TZQWORD)(-1))

#define TZMAKEWORD(a, b)					((TZWORD)(((TZBYTE)(((TZWORD)(a)) & TZBYTE_MAX)) | ((TZWORD)((TZBYTE)(((TZWORD)(b)) & TZBYTE_MAX))) << TZBYTE_BIT))
#define TZLOBYTE(w)								((TZBYTE)(((TZWORD)(w)) & TZBYTE_MAX))
#define TZHIBYTE(w)								((TZBYTE)((((TZWORD)(w)) >> TZBYTE_BIT)& TZBYTE_MAX))

#define TZMAKEDWORD(a, b)				((TZDWORD)(((TZWORD)(((TZDWORD)(a)) & TZWORD_MAX)) | ((TZDWORD)((TZWORD)(((TZDWORD)(b)) & TZWORD_MAX))) << TZWORD_BIT))
#define TZLOWORD(dw)							((TZWORD)(((TZDWORD)(dw)) & TZWORD_MAX))
#define TZHIWORD(dw)							((TZWORD)((((TZDWORD)(dw)) >> TZWORD_BIT) & TZWORD_MAX))

#define TZMAKEQWORD(a, b)				((TZQWORD)(((TZWORD)(((TZQWORD)(a)) & TZDWORD_MAX)) | ((TZQWORD)((TZWORD)(((TZQWORD)(b)) & TZDWORD_MAX))) << TZDWORD_BIT))
#define TZLODWORD(qw)						((TZDWORD)(((TZQWORD)(qw)) & TZDWORD_MAX))
#define TZHIDWORD(qw)						((TZDWORD)((((TZQWORD)(qw)) >> TZDWORD_BIT) & TZDWORD_MAX))

#define TZGETBIT(f, b)							(((f) & (b)) ? true : false)
#define TZGETBITS(f, b)							((((f) & (b)) ^ (b)) ? false : true)
#define TZSETBIT(f, b, v)							((v) ? ((f) |= (b)) : ((f) &= ~(b)))
#define TZ_NUM_ARRAYE(x)					(sizeof(x) / sizeof(x[0]))

#ifndef NULL
    #ifdef __cplusplus
        #define  NULL 0
    #else
        #define NULL ((void *)0)
    #endif
#endif // __cplusplus

// Constant
#ifndef TRUE
    #define TRUE 1
#endif

#ifndef FALSE
    #define FALSE 0
#endif

#ifndef TZEOS
    #define TZEOS           TZ_T('\0')
#endif

#ifndef TZEOSA
    #define TZEOSA         '\0'
#endif

#ifndef TZEOSW
#define TZEOSW           L'\0'
#endif

#if defined(_IA64_) || (TZ_COMPILER == TZ_COMPILER_MSVC && (TZ_COMPILER_VER >= 1020) || (TZ_COMPILER == TZ_COMPILER_BORL) || (TZ_COMPILER_VER == __BCPLUSPLUS__))
    #define BUILTIN_INT64 __int64
    #define PERCENT18LONG "%18I64d\r\n"
#elif TZ_SIZEOF_POINTER == 8
    #define BUILTIN_INT64 long
    #define PERCENT18LONG "%18Id\r\n"
#elif defined(__MWERKS__) || defined(__GNUC__) || defined(sgi) || defined(_AIX) || defined(__sun) || defined(__hpux)
    #define BUILTIN_INT64 long long
    #define PERCENT18LONG "%18Ild\r\n"
#endif

#ifndef  BUILTIN_INT64
    #define PERCENT18LONG "%18d\r\n"
#endif

#endif

个人格言

    用心去感受你自己需要坚持的生活,未来慢慢会给你答案的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值