C+语言的新特性

总是期待学习别人做好了的东西,是否也是一种懒惰呢?

C+语言是一门想象中的语言,它介于C和C++之间。新的研究表明,C语言不支持某些特性,而C++过于复杂。于是,便有了C+语言,它的新特性如下:

  • 新的函数名
  • 编译前函数
  • 自动添加free
  • html格式
  • 嵌套的注释,不会重复包含的头文件,可有可无的分号

新的函数名

首先要说说“六个独立的命名空间”,有这个想法,是因为C语言中出现了如下句子:
time_t time1=time(NULL);
在这个句子中time出现了三次,分别代表三个不同的意思。time_t是类型,time1是变量,time是函数。把类型、变量名、函数名混在一个命名空间中,是C语言的选择。
而六个独立的命名空间是新事物,并且结合自然语言编程的古老愿望,出现了以下想象中的代码:
int [%猫*]叫(cat)
函数名中包含中括号,百分号,不再是简单的标识符:字母数字下划线的组合,不以数字开头。这包括两个创意:中括号表示任意位置的参数、百分号表示类型。

中括号的使用,再举一个例子:
计算[1,2,3]的和至[a]
生成[4]到[50]的随机数整数
这是追求自然语言编程的结果,把参数放在不同的位置。第一个句子计算1,2,3的和,并储存在变量a中。第二个句子生成一个随机数,没写储存在哪里,那么就储存在“上下文容器”中,它后边的句子再从上下文容器中取值。

百分号的使用,属于“六个独立的命名空间”的一部分,它们是:
#数值 %类型 $变量 &函数 ^语法 @文件

编译前函数

这是C语言的宏,和C++的模板的进一步发展。编写“会编程序的程序”不是什么大不了的事情,网络上的动态网页(jsp, php, asp等)就是一段小程序;编译原理中的词法分析、语法分析工具,也是这样的程序。

自动添加free

这是运行时自动垃圾回收的替代版本,它在编译时完成,代替程序员找出需要free的地方,简化程序员的工作,减少内存泄露的发生。Java使用标记清除,Python使用引用计数,而自动添加free是第三种方法。

把程序结构分成八种类型:顺序、分支、循环、调用、并行、赋值、取址、包装。著名的四色定理,分了几千种情况,终于通过计算机证明出来了,八种不多。

{p=mallocuse(p)free(p)
}

以上是顺序结构,在一对大括号中,p是局部变量,它储存着malloc的结果。追踪p的“生命线”,在不使用p之后,自动添加free。

分支结构是多个并列的顺序结构,也要追踪生命线。

p=malloc
if(!p)error

这是malloc的错误处理,不算分支结构。

循环结构是反复执行的顺序结构,一般来说,如果循环体内部的p是局部变量,就按顺序结构处理,在循环体结束前,或p的生命线结束时free。另一种情况,希望在循环结束之后继续使用里边最后一个变量,这需要专门的结构:

for(i=0,t=NULL;i<10;i++){if(t)free(t);t=mallocuse(t)
}

调用结构被认为是最难的结构,因为它返回p指针,即malloc的结果,这就把问题的难度延伸至函数以外了。C++的术语:构造函数、析构函数说的就是这种情况。要根据构造函数自动编写析构函数,那是相当的难!某些特殊的情况如下:

void *func()
{p=mallocreturn p+1
}

为什么要return p+1,这只是一个例子,来说明情况的复杂性。在主函数中调用func函数后,就可以使用p[-1]访问指针左边的一个单元,而用p[i]正常访问p右边的内容。对应的析构函数需要把p减1,再free。

并行结构不只是并行运算中才有,在顺序结构中,如果malloc的结果没有储存在局部变量中,而是储存于static变量,或全局变量,就构成并行结构。多线程使用同一块内存,也是这种形式。
在这里插入图片描述
赋值:

p=malloc
q=p

在p和q的生命线全都结束了,才能free。

取址:

o=malloc
p=&o

包装:

o=malloc
a.b=o

html格式

这一想法出现在很久以前,让源代码能够呈现出多彩的格式,如<red>一段程序</red>。这段代码将被呈现为红色,这需要特制的浏览器,但是,既然html浏览器可以实现,用于源代码的html格式一定也能实现。

初步的设想,是通过编译预处理去除所有html标签,然后再进行编译。

其它特性

嵌套的注释,不会重复包含的头文件,可有可无的分号。这些都是一些琐碎的内容,为C+语言提供更好的使用体验。

嵌套的注释:
C语言中,/* /*注释*/ */不能如预期那样工作,注释不能嵌套,需改进。

不会重复包含的头文件:
现在,为了防止头文件被重复包含,需要这样写:

#ifndef THIS_FILE_H
#define THIS_FILE_H#endif

这是固定写法,把它变成默认的,自动添加。在源代码中不出现上述三行,而是自动添加后再进行编译。

写出不重复的宏是一项挑战,可以用头文件的路径,并在前面加上@,成为"@THIS_FILE_H"。这个符号参考上文的六个独立的命名空间。

可有可无的分号:

struct test{int a;double b}

这段代码中省略了两处分号,能省就省。

总结

C+语言是一门想象中的语言,它是实现“公共命名空间”的过渡语言。以上特性,除了自动添加free外,都较容易实现。不要添加过多的特性,避免变得像C++那样过于复杂。更多关于计算机语言的期望,留给公共命名空间。

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

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

相关文章

【Proteus仿真】【Arduino单片机】太阳能追光系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用LCD1602液晶、光敏传感器、ADC模块、按键模块、28BYJ48步进电机驱动模块、直流电机模块等。 主要功能&#xff1a; 系统运行后&#xff0c;L…

QGIS009:QGIS常用插件、GDAL和GRASS GIS常用工具

摘要:本文介绍QGIS支持的数据格式、QGIS常用插件以及GDAL和GRASS GIS模块常用工具。 一、QGIS支持的数据格式 1、矢量数据格式 1.1文件格式 ESRI Shapefile(SHP):ESRI公司开发的一种空间矢量数据文件格式,是最为常用的矢量数据格式之一,支持点、线、面等要素类型。GeoJ…

vue 的实例生命周期

Vue.js 的实例生命周期指的是 Vue 实例在创建、更新和销毁过程中的一系列事件和钩子函数&#xff0c;允许在不同阶段执行自定义操作。Vue 实例的生命周期可以分为以下阶段&#xff1a; 创建&#xff08;Creation&#xff09;&#xff1a; beforeCreate&#xff1a;在实例初始化…

DS|哈夫曼编码及应用

题目一&#xff1a;DS树 -- 赫夫曼树的构建与编码 题目描述&#xff1a; 给定n个权值&#xff0c;根据这些权值构造huffman树&#xff0c;并进行huffman编码 注意数组访问是从位置1开始 要求&#xff1a;赫夫曼的构建中&#xff0c;默认左孩子权值不大于右孩子权值 输入要…

淘宝商品详情API接口(item_get-获得淘宝商品详情)主图,属性,sku,价格,搜索商品列表

淘宝开放平台提供了API接口&#xff0c;允许开发者获取淘宝商品的相关信息。为了获取商品详情&#xff0c;您可以使用 item_get API接口。以下是如何使用此API接口来获取商品的主图、属性、SKU、价格以及搜索商品列表的简要说明&#xff1a; 公共参数 名称类型必须描述keyStr…

PromptCast:基于提示学习的时序预测模型!

目前时序预测的SOTA模型大多基于Transformer架构&#xff0c;以数值序列为输入&#xff0c;如下图的上半部分所示&#xff0c;通过多重编码融合历史数据信息&#xff0c;预测未来一定窗口内的序列数值。 受到大语言模型提示工程技术的启发&#xff0c;文章提出了一种时序预测新…

Redis小计(3)

目录 redis为什么是单线程模型和为什么不推荐使用"keys *"指令 redis为什么是单线程模型和为什么不推荐使用"keys *"指令 单线程模型可以避免线程安全问题&#xff0c;即并发访问导致的数据冲突。当大量客户端发来请求时&#xff0c;redis服务器只能一个一…

排序之冒泡排序

冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。 思路&#xff1a; 左边大于右边交…

Mobileperf:优化移动应用性能的关键工具

引言&#xff1a; 随着移动设备的普及和功能的不断增强&#xff0c;移动应用在人们的日常生活中扮演着越来越重要的角色。然而&#xff0c;由于移动设备资源有限&#xff0c;如处理器、内存和电池等&#xff0c;移动应用的性能问题也日益突出。为了提高用户体验和满足用户需求&…

单机部署Rancher

上次已经安装完毕了k8s了&#xff0c;但是想要界面化的管理&#xff0c;离不开界面工具&#xff0c;首推就是rancher&#xff0c;本文介绍安装rancher的安装&#xff0c;也可以将之前安装的k8s管理起来。 已经安装完毕docker和docker-ce的可以直接从第三部分开始。 一、基础准…

【数据库原理】(10)数据定义功能

SQL 数据定义功能包括定义模式、定义表、定义索引和定义视图,其语句如表所示。 一.创建、删除模式 1.创建模式 (Create Schema) 用途&#xff1a;创建模式是为了在数据库中定义一个新的命名空间&#xff0c;它可以包含多个数据库对象。 语法&#xff1a; CREATE SCHEMA &…

json.stringify()详解

json.stringify()详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同深入探讨在JavaScript中常用的JSON处理方法——JSON.stringify()&…

数据库期末重点

第一章&#xff1a; 1.数据库发展的三个阶段 第一代数据库系统、第二代数据库系统、新一代数据库系统 2.数据库系统发展的三个里程碑 IMS系统、DBTG报告、关系数据库系统 3.数据管理技术三个阶段 人工管理阶段(40年代中-50年代中) 文件系统阶段(50年代末-60年代中) 数据…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图&#xff0c;其实很简单&#xff0c;就是每次挑选数字中最小的作为第一个 &#xff0c;直到整个数据有序就结束了 顾名思义&#xff0c;选择&#xff0c;那就是选取&#xff0c…

打造私域流量的知识付费小程序saas租户平台

当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;明理信息科技提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1a;…

Visual Studio Code可以做到这一点:提示和技巧:Build 2018

Visual Studio Code火了。每个人都喜欢这个意想不到的文本编辑器&#xff0c;而且理由很充分&#xff1a;它可以做很多事情。它可以动态编译JavaScript模板&#xff0c;内联执行JavaScript&#xff0c;管理Mongo DB实例等等&#xff01;在这个部分&#xff0c;我们将看到Visual…

数据结构OJ实验15-插入排序与交换排序

A. DS内排—直插排序 题目描述 给定一组数据&#xff0c;使用直插排序完成数据的升序排序。 --程序要求-- 若使用C只能include一个头文件iostream&#xff1b;若使用C语言只能include一个头文件stdio 程序中若include多过一个头文件&#xff0c;不看代码&#xff0c;作0分…

ubuntu 安装 anaconda

ubuntu 安装 anaconda 下载 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh安装 bash Anaconda3-2023.09-0-Linux-x86_64.sh2.1 回车继续 2.2 许可协议 输入 q 退出阅读许可协议 2.3 输入 yes 接受 许可协议 2.4 设置 anaconda 安装位置 如不需…

聚观早报 |谷歌起草“机器人宪法”;极越与福耀集团达成合作

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月6日消息 谷歌起草“机器人宪法” 极越与福耀集团达成合作 三星电子宣布与现代汽车集团合作 OpenAI下周将推GP…

18款Visual Studio实用插件(更新)

前言 俗话说的好工欲善其事必先利其器&#xff0c;安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升&#xff0c;避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用&#xff0c;大家有更好的插件推荐可在文…