Open CASCADE学习|数据类型定义

今天研究一下Standard_TypeDef.hxx文件,该文件的代码如下,首先检查是否存在一个名为"_Standard_TypeDef_HeaderFile"的头文件,如果不存在则创建该头文件。

然后,它包含了一些标准库头文件,例如cstddef、ctime和stdint.h等。

接下来,根据编译器的版本,它进行了不同的处理。如果是Visual Studio 2013(vc12),则只提供了头文件;否则应该只需要<cinttypes.h>头文件。对于旧版本的C99编译器,使用了兼容性代码来包含<inttypes.h>头文件。

然后,它定义了一些宏,例如Standard_False和Standard_True用于表示布尔值false和true。

接着,它包含了一个名为"Standard_Macro.hxx"的头文件。

之后,它定义了一些类型别名,例如Standard_Integer、Standard_UInteger等用于表示不同类型的整数。

最后,它定义了一些与Unicode相关的类型别名,例如Standard_Utf8Char、Standard_Utf8UChar等用于表示UTF-8编码的字符类型。同时,根据编译器的版本,它还定义了不同类型的字符类型,例如char16_t、char32_t、wchar_t等。

此外,它还定义了一些字符串类型的别名,例如Standard_CString和Standard_ExtString。

#ifndef _Standard_TypeDef_HeaderFile
#define _Standard_TypeDef_HeaderFile#include <cstddef>
#include <ctime>#include <stdint.h>#if(defined(_MSC_VER) && (_MSC_VER < 1800))// only Visual Studio 2013 (vc12) provides <cinttypes> header// we do not defined all macros here - only used by OCCT framework#define PRIx64 "I64x"#define PRIX64 "I64X"#define PRId64 "I64d"#define PRIu64 "I64u"#define SCNd64 "I64d"#define SCNu64 "I64u"#ifdef _WIN64#define PRIxPTR "I64x"#define PRIXPTR "I64X"#define PRIdPTR "I64d"#define PRIuPTR "I64u"#define SCNdPTR "I64d"#define SCNuPTR "I64u"#else#define PRIxPTR "Ix"#define PRIXPTR "IX"#define PRIdPTR "d"#define PRIuPTR "u"#define SCNdPTR "d"#define SCNuPTR "u"#endif
#else// should be just <cinttypes> since C++11// however we use this code for compatibility with old C99 compilers#ifndef __STDC_FORMAT_MACROS#define __STDC_FORMAT_MACROS#endif#include <inttypes.h>
#endif#define Standard_False false
#define Standard_True  true#include <Standard_Macro.hxx>typedef int           Standard_Integer;
typedef unsigned int  Standard_UInteger;
typedef double        Standard_Real;
typedef bool          Standard_Boolean;
typedef float         Standard_ShortReal;
typedef char          Standard_Character;
typedef unsigned char Standard_Byte;
typedef void*         Standard_Address;
typedef size_t        Standard_Size;
typedef std::time_t   Standard_Time;// Unicode primitives, char16_t, char32_t
typedef char          Standard_Utf8Char;     //!< signed   UTF-8 char
typedef unsigned char Standard_Utf8UChar;    //!< unsigned UTF-8 char
#if ((defined(__GNUC__) && !defined(__clang__) && ((__GNUC__ == 4 && __GNUC_MINOR__ <= 3) || __GNUC__ < 4)) || (defined(_MSC_VER) && (_MSC_VER < 1600)))
// compatibility with old GCC and MSVC compilers
typedef uint16_t      Standard_ExtCharacter;
typedef uint16_t      Standard_Utf16Char;
typedef uint32_t      Standard_Utf32Char;
#else
typedef char16_t      Standard_ExtCharacter;
typedef char16_t      Standard_Utf16Char;    //!< UTF-16 char (always unsigned)
typedef char32_t      Standard_Utf32Char;    //!< UTF-32 char (always unsigned)
#endif
typedef wchar_t       Standard_WideChar;     //!< wide char (unsigned UTF-16 on Windows platform and signed UTF-32 on Linux)//
typedef const Standard_Character*    Standard_CString;
typedef const Standard_ExtCharacter* Standard_ExtString;#endif // _Standard_TypeDef_HeaderFile


1、_MSC_VER

_MSC_VER是微软公司推出的C/C++编译器在ANSI/ISO C99标准之外扩展的宏定义,用来定义当前微软公司自己的编译器的主版本,进行预编译控制。

_MSC_VER可以分解为:

MS:Microsoft的简写。

C:MSC就是Microsoft的C编译器。

VER:Version的简写。

_MSC_VER的意思就是:Microsoft的C编译器的版本。

需要注意的是,这并不是Visual Studio 的版本号,也不是Visual C++的版本号。

MS VC++ 14.0 _MSC_VER = 1900 (Visual C++ 2015)

MS VC++ 12.0 _MSC_VER = 1800 (Visual C++ 2013)

MS VC++ 11.0 _MSC_VER = 1700 (Visual C++ 2012)

MS VC++ 10.0 _MSC_VER = 1600 (Visual C++ 2010)

MS VC++ 9.0 _MSC_VER = 1500 (Visual C++ 2008)

MS VC++ 8.0 _MSC_VER = 1400 (Visual C++ 2005)

MS VC++ 7.1 _MSC_VER = 1310 (Visual C++ 2003)

MS VC++ 7.0 _MSC_VER = 1300 (Visual C++ 2002)

MS VC++ 6.0 _MSC_VER = 1200

MS VC++ 5.0 _MSC_VER = 1100

2、__GNUC__与__GNUC_MINOR__

__GNUC__ 和__GNUC_MINOR__ 是 GCC 编译器提供的宏,用于在编译时获取当前使用的 GCC 版本号。

其中,__GNUC__ 表示当前使用的GCC 版本的主版本号,例如 4 表示 GCC 4.x 系列;__GNUC_MINOR__ 表示当前使用的 GCC 版本的次版本号,例如 3 表示 GCC 4.3 系列。

因此,__GNUC__ == 4 && __GNUC_MINOR__ <= 3 的意思是:如果当前使用的 GCC 版本为主版本号为 4、次版本号小于等于 3 的版本,则条件成立。

这个条件通常用于判断当前使用的 GCC 版本是否为 4.3 或更早版本。如果是,则需要使用与这些版本不同的语法或特性,否则可能会出现不兼容的问题

3、__clang__

__clang__ 是一个预处理器宏,用于在编译时判断当前使用的编译器是否为 clang。

Clang 是一个由 LLVM 基金会开发的 C、C++、Objective-C 和 OpenMP 的编译器前端,它具有高性能、可移植性和灵活性等特点。与 GCC 类似,Clang 也支持许多相同的语言特性和标准库,因此经常被用作 GCC 的替代品。

在代码中使用 #ifdef __clang__ 可以判断当前编译器是否为 clang,如果是则执行相应的代码块。这对于针对不同编译器编写不同的代码非常有用,可以提高代码的可移植性和兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音向微信引流主要有哪几种方法-数灵通

近年来&#xff0c;随着智能设备的普及和信息技术的进步&#xff0c;短视频制作门槛逐渐降低&#xff0c;用户自创视频数量迅猛增长&#xff0c;用户规模持续扩大&#xff0c;有力推动了移动短视频的繁荣发展&#xff0c;市场规模也在不断扩张。作为当下炙手可热的短视频APP&am…

pycharm安装过程

1、安装包官网下载 PyCharm: the Python IDE for Professional Developers by JetBrains 点击下载 下拉选择社区版本 选择下载 下载完成后&#xff0c;双击exe安装。 安装完成&#xff0c;生成的桌面快捷方式 同意并继续 进入开发界面

centos宝塔远程服务器怎么链接?

要远程连接CentOS宝塔服务器&#xff0c;可以按照以下步骤操作&#xff1a; 打开终端或远程连接工具&#xff0c;比如PuTTY。输入服务器的IP地址和SSH端口号&#xff08;默认为22&#xff09;&#xff0c;点击连接。输入用户名和密码进行登录。 如果你已经安装了宝塔面板&…

网络安全学习 --- 小实验

题目 要求 1.防火墙线下使用子接口分别对应两个内部区域。 2.所有分区设备可以ping通网关。 过程 1.接口&#xff0c;区域配置完成。 2.配置SWL2 vlan 2 vlan 3 # interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 2 to 3 # interface Giga…

JavaWeb之JavaScript-Vue --黑马笔记

什么是JavaScript&#xff1f; JavaScript&#xff08;简称&#xff1a;JS&#xff09; 是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互。 JavaScript 和 Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似。 …

c语言不定参数

时间记录&#xff1a;2024/1/22 一、不定参数的函数定义和使用到的c函数 &#xff08;1&#xff09;定义 void fun1(参数类型 argName,...); 示例&#xff1a; void fun1(int count,...);&#xff08;2&#xff09;获取不定参数的值 #include <stdarg.h> //包含头文件…

java数据结构与算法刷题-----LeetCode667. 优美的排列 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组&#xff0c;必须含有1~n…

信号处理--matlab绘制包络谱图

包络谱图是一种描述信号振动特征的频谱图&#xff0c;它可以显示出信号振动的主要频率成分和振幅变化情况。在机械系统故障诊断和健康监测等领域中&#xff0c;绘制包络谱图是一种常用的分析方法&#xff0c;其主要作用有以下几个方面&#xff1a; 检测故障特征频率&#xff1a…

AI 欺诈事件频出,如何重塑身份认证的安全性?

据报告表示&#xff0c;生成式人工智能每年可为世界经济注入相当于 4.4 万亿美元的资金。预计到 2030 年&#xff0c;人工智能对全球财政的潜在贡献将达到 15.7 万亿美元。人们惊叹于 AI 强大工作效率&#xff0c;期待能帮忙节省不必要的劳动力&#xff0c;但事实上 AI 出现之后…

C++类的简单学习

C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数 之前在数据结构学习中&#xff0c;我们用C语言方式实现的栈&#xff0c;结构体中只能定义变量&#xff1b;现在以C方式实现&#xff0c;会发现struct中也可以定义函…

题记(29)--魔咒词典

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有100000种不同的魔咒&#xff0c;哈利很难全部记住&#xff0c;但是为了对抗强敌&#xff0c;他必须在危急时刻…

C++ Qt day1

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数(要求使用C风格字符串完成) #include <iostream> #include <string.h> #include <array> using namespace std;int main() {string str;cout <<…

数据结构Java版(5)——链栈和链队列的实现

之前我们对链表进行了讲解&#xff0c;这次我们来用链表的方式来实现栈和队列两个接口&#xff0c;来加深我们对链表的理解。 一、链栈 栈的接口与顺序栈的接口相同&#xff0c;这里我们主要展示如何用我们自己写的链表来实现这个接口&#xff0c;代码展示如下&#xff1a; 接…

AI-数学-高中-8-函数奇偶性

原作者视频&#xff1a;函数】6函数奇偶性&#xff08;易-中档&#xff09;_哔哩哔哩_bilibili 示例&#xff1a; 已知奇偶性求解析式&#xff1a; 奇偶、单调函数综合示例&#xff1a;

黑马程序员——javase进阶——day01——匿名对象 , 继承 , 抽象类

目录&#xff1a; 面向对象回顾 面向对象的核心思想是什么?现有的类还是先有的对象?Java类的创建?类中的组成成分?创建对象所使用的关键字?创建对象的格式?调用对象的成员?定义构造方法的格式?定义构造方法的特点?构造方法的作用?面向对象三大特征是什么?封装的思想…

Java面试题:如何实现线程循环切换?

嗨大家好&#xff0c;我是小米&#xff01;今天我们要聊一个非常有趣的话题——社招面试题&#xff1a;Java中如何实现线程循环切换&#xff1f;大家都知道&#xff0c;在Java中处理多线程是一项非常常见而又重要的任务&#xff0c;而线程的循环切换更是其中的一大亮点。那么&a…

【图神经网络】GNNExplainer代码解读及其PyG实现

GNNExplainer代码解读及其PyG实现 使用GNNExplainerGNNExplainer源码速读前向传播损失函数 基于GNNExplainer图分类解释的PyG代码示例参考资料 接上一篇博客图神经网络的可解释性方法及GNNexplainer代码示例&#xff0c;我们这里简单分析GNNExplainer源码&#xff0c;并用PyTor…

基于sentinel-2 遥感数据的水体提取(水体指数法)

本文框架设置如下&#xff1a; 简单介绍senintel-2数据&#xff1b;如何利用sentinel-2数据获取水体边界/范围 1 Sentinel-2数据介绍及下载方式 有Sentinel-2A/2B两颗卫星&#xff0c;其参数基本一致&#xff0c;因此两颗卫星的数据联合使用很方便。 分辨率有&#xff1a;1…

Laya2.13.3接入FGUI

下载与复制文件与Laya1.x类似&#xff0c;可以看我上一篇&#xff1a; Laya1.8.4接入FariyGui&#xff0c;以及其中踩的坑-CSDN博客 不同的是&#xff1a; 两个库文件需要在index.js中引入 新建一个脚本将fgui中搭建好的UI包引入&#xff1a; export default class GameApp…

GBASE南大通用数据库GBase 8s常见问题讲堂 -- no more pages/no more extents

本文摘自GBASE南大通用社区&#xff0c;by&#xff1a;wty&#xff0c;原文请点击&#xff1a;GBase 8s常见问题 -- no more pages/no more extents|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商 问题现象 insert数据失败&…