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.hqwc.cn/news/327107.html

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

相关文章

[ComfyUI进阶教程] 使用IPAdapater FaceID换脸

IPapapter 的团队推出IP-Adapter-FaceID模型,相较于旧模型大幅提高从图片还原人像的相似度。一张照片换脸现在可以更精准了。 使用人脸识别模型中的人脸 ID 嵌入代替 CLIP 图像嵌入,此外,使用 LoRA 来提高 ID 一致性。 IP-Adapter-FaceID 只需文字提示即可生成以人脸为条件的…

如何把硬盘(分区)一分为二?重装系统的小伙伴不可不看

注意事项&#xff1a;本教程操作不当会导致数据丢失 请谨慎操作 请谨慎操作 请谨慎操作 前言 相信各位小伙伴都会切土豆吧&#xff0c;本教程就是教大家如何切土豆切得好的教程。 啊哈哈哈&#xff0c;开玩笑的。 比如你有一个D盘是200GB&#xff0c;想要把它变成两个100G…

Mysql 下载与安装教程(详细介绍与总结)

一&#xff1a;版本介绍 首先&#xff0c;我们需要先进入官网进行下载&#xff0c;在官网中有好几个版本&#xff0c;那么这里我分别简述一下MySQL各个版本区别&#xff1a; 1&#xff1a;企业版&#xff0c;MySQL Enterprise Edition 需要付费的&#xff0c;可以免费试用30天…

啊哈c语言——逻辑挑战9:水仙花数

有一种三位数特别奇怪&#xff0c;这种数的“个位数的立方”加上“十位数的 立方”再加上“百位数的立方”恰好等于这个数。例如&#xff1a; 153111555333&#xff0c;我们为这种特殊的三位数起了一个很好听的名字——“水仙花数”&#xff0c;那么请你找出所有的“水仙花数”…

【计算机网络】TCP原理 | 可靠性机制分析(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

docker 完成MySQL的主从复制

文章目录 搭建步骤 搭建步骤 拉取镜像 docker pull mysql:5.7运行主从 docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_P…

【方法】PPT设置密码后如何修改?

PowerPoint是我们日常和工作中经常用到的办公软件&#xff0c;有时候为了保护文件&#xff0c;还会设置密码&#xff0c;那设置密码后又想要修改密码&#xff0c;怎么操作呢&#xff1f;下面来看看PPT常用的两种密码是如何修改的。 1. “打开密码” 想要修改PPT的“打开密码”…

【操作系统xv6】学习记录5--实验1 Lab: Xv6 and Unix utilities

ref:https://pdos.csail.mit.edu/6.828/2020/xv6.html 实验&#xff1a;Lab: Xv6 and Unix utilities 环境搭建 实验环境搭建&#xff1a;https://blog.csdn.net/qq_45512097/article/details/126741793 搭建了1天&#xff0c;大家自求多福吧&#xff0c;哎。~搞环境真是折磨…

【Android取证篇】小米手机OTG取证知识

【Android取证篇】小米手机OTG取证知识 小米手机OTG使用方法—【蘇小沐】 目录 1、OTG用途 2、手机连不上U盘 3、小米手机有没有OTG 4、手机usb调试找不到 5、MHL能否在HDMI输出视频的同时进行USB传输 1、OTG用途 使用OTG外接设备&#xff0c;需要使用和手机接口对应匹配的…

计算机基础知识——校验码概述

目录 1 码距 2 奇偶校验 3 CRC循环冗余校验码 3.1 多项式 3.2 编码的组成 3.3 生成多项式 3.4 校验码的生成 4 海明校验码和恒比码 4.1 校验方程 4.2 恒比码 1 码距 码距是恒量一种编码方式的抗错误能力的一个指标。数字信息在传输和存取的过程中&#xff0c;由于…

C++补充内容--语法篇

这里写目录标题 语法其他语法函数的存储类函数参数默认值格式默认参数位置重载函数的默认参数 指针名与正常指针的自增自减以及解引用与的优先级问题指针的赋值、加减数字、加减指针二维数组中的一些指针辨析输出调用字符指针时 会将该指针以及之后的元素全部输出二维数组未完全…

栅极驱动芯片三种隔离技术

栅极驱动芯片三种隔离技术 1.栅极驱动器概述2.隔离栅极驱动芯片2.1隔离驱动器重要指标 3.三种常见隔离技术3.1光隔离3.2变压器隔离/磁隔3.3电容隔离 4.三种隔离器性能对比 1.栅极驱动器概述 栅极驱动器&#xff0c;在任何功率水平为任何应用高效可靠地驱动任何功率开关。 比如M…