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=malloc
    use(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=malloc
    use(t)
}

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

void *func()
{
    p=malloc
    return 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++那样过于复杂。更多关于计算机语言的期望,留给公共命名空间。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】js定义对象属性是.如何访问

当变量没有length属性的时候&#xff0c;可能是个对象变量&#xff0c;当有键值对的时候就可能是个对象&#xff0c;读者都知道的是&#xff0c;用typeof(变量)可以查看属性&#xff0c;今天本文解决的问题是如果js定义对象中属性是"点"如何访问 问题再现 var a {…

【Linux软件包管理器】yum详解

目录 1、什么是软件包 2、yum的操作 1&#xff09;yum源 2&#xff09;三板斧 ① yum list ② yum install [软键名] ③ yum remove [软件名] 1、什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了,…

Dubbo入门介绍和实战

1. 引言 Dubbo是一款开源的高性能、轻量级的Java RPC&#xff08;远程过程调用&#xff09;框架&#xff0c;旨在解决分布式服务之间的通信问题。本文将介绍Dubbo的基础概念、核心特性以及使用场景&#xff0c;包括实际示例演示。 2. 什么是Dubbo&#xff1f; Dubbo是阿里巴…

Spring Boot依赖版本声明

链接 官网 Spring Boot文档官网&#xff1a;​​​​​​https://docs.spring.io/spring-boot/docs/https://docs.spring.io/spring-boot/docs/ Spring Boot 2.0.7.RELEASE Spring Boot 2.0.7.RELEASE reference相关&#xff1a;https://docs.spring.io/spring-boot/docs/2.…

实战|验证码突破思路

目录 一、暴力破解突破验证码 二、时间、次数突破验证码 三、回显突破验证码 四、绕过验证码方法介绍 一、暴力破解突破验证码 方法 有的验证码输入正确一次&#xff0c;在一定时间内不用再输入。 有的验证码输入正确一次&#xff0c;会在你session中设定一个值&#xff0…

DFA算法在敏感词过滤的应用

相信大家对于游戏里聊天框的以下内容已经不陌生了 "我***"“你真牛*”“你是不是傻*” 一个垃圾的游戏环境是非常影响玩游戏的心情的&#xff0c;看到这些&#xff0c;就知道游戏已经帮我们屏蔽掉了那些屏蔽字了&#xff0c;对于玩游戏而言&#xff0c;心里会好受很…

Raft no-op日志

no-op日志 为什么 Leader 不能提交之前任期的日志&#xff0c;只能通过提交自己任期的日志&#xff0c;从而间接提交之前任期的日志。 先按错误的情况&#xff0c;也就是 Leader 可以提交之前任期的日志。那么上述的流程&#xff1a; s1 是任期 2 的 Leader(仔细看&#xff0…

【Tomcat】在一台计算机上运行两个Tomcat服务

首先把Tomcat整个文件复制一份放在其他文件夹路径中 1.修改环境变量 添加环境变量在系统变量里面 “CATALINA_HOME” 指向一个路径 “CATALINA_HOME1” 指另一个Tomcat路径 2.修改startup里面的环境变量&#xff0c;全部修改 修改"D:\Java\apache-tomcat-8.5.45\bin&…

Raft Lab3A

Lab3 需要在 Raft 层上实现一个 fault-tolerant key-value service&#xff0c;满足强一致性&#xff0c;也就是线性一致性 (Linearizable Consistency)。线性一致性保证整个系统看起来好像只有一个副本&#xff0c;其中所有的操作都是原子性的。简单地说&#xff0c;线性一致性…

Unity之预制体与变体

PS:不用说了&#xff0c;我在写博客就是在摸鱼 一、预制体 不知道大家小时候有没有看过火影&#xff0c;记得剧情最开始的时候水木哄骗鸣人去偷封印之书&#xff0c;反而让鸣人学会了多重影分身之术&#xff1a; 好了&#xff0c;小编绞尽脑子终于想好怎么向大家介绍预制体了&a…

高级分布式系统-第3讲 网络与网络互联

万维网的诞生 1957年10月4日&#xff0c; 苏联发射了人类第一颗人造卫星—斯普特尼克一号 美国政府震惊不已。 他们认为&#xff0c; 在日趋激烈的冷战对抗中&#xff0c; 自己已经全面落后于苏联。 为了扭转这一局面&#xff0c; 美国国防部很快于1958 年 2 月组建了一个神秘…

红队专题-Web安全/渗透测试-文件上传/下载/包含

文件上传/下载/包含 招募六边形战士队员利用目录穿越反弹SHELL实战测试2.2 提交报文修改检测3.2 文件内容检测绕过完整文件结构 检测 第四章&#xff1a;解析漏洞第一节 常见解析漏洞iis/nginx php fastcgi 取值错误 解析漏洞 &#xff08;配置错误&#xff09;nginx 文件名逻…

2024年,Web3技术的“iPhone时刻”会出现吗?

出品&#xff5c;欧科云链研究院 关于2024年的Web3市场&#xff0c;大多数人目前是持乐观态度的。随着宏观政策稳定&#xff0c;美国和香港地区不断释放加密资产现货ETF的利好&#xff0c;叠加铭文热潮及减半周期临近&#xff0c;市场对Web3及加密资产的兴趣正持续上涨。年后的…

项目从npm迁移到pnpm

场景如下&#xff1a;在安装Vue3时默认为使用Npm安装&#xff0c;如图所示&#xff1a; 安装完后项目就包含了基于NPM的node_modules、package.json&#xff0c;以及package-lock.json 如果想使用pnpm去安装依赖项的话&#xff0c;可以通过如下几个步骤实现&#xff1a; ①删…

UICollection Compositional Layout全详解

本文字数&#xff1a;8325字 预计阅读时间&#xff1a;45分钟 01 Collection View Layout全详解 UICollectionView在iOS中是构建复杂布局的强大工具。iOS13中引入的 UICollectionViewCompositionalLayout为创建自定义布局提供了全新的可能性。本文将深入探讨Compositional Lay…

复试 || 就业day04(2024.01.05)项目一

文章目录 前言线性回归房价预测加载数据数据查看数据拆分数据建模模型的验证、应用模型的评估 总结 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;本文内容来自某机构网课&#xff0c;是我为复试准备的第一个项目 &#…

JAVA中小型医院信息管理系统源码 医院系统源码

开发框架&#xff1a;SpringBootJpathymeleaf 搭建环境&#xff1a;jdk1.8idea/eclipsemaven3mysql5.6 基于SpringBoot的中小型医院信息管理系统&#xff0c;做的比较粗糙&#xff0c;但也实现了部分核心功能。 就诊卡提供了手动和读卡两种方式录入&#xff0c;其中IC读卡器使用…

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)

Python(30)&#xff1a;非对称加密算法RSA的使用(openssl生成RSA公私钥对) 1、openssl生成RSA公私钥对 1.1、生成RSA公私钥对命令 [rootloaclhost ~]# openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus .. ...…

PN协议下,上位机如何通过RJ45口远程控制PLC?

在实际系统中&#xff0c;车间里分布多台PLC&#xff0c;需要用上位机软件集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大且不美观&#xff0c;这种情况下比较适合采用无线通信方式。 本方案以组态王和2…

【AI视野·今日Robot 机器人论文速览 第六十八期】Tue, 2 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 2 Jan 2024 Totally 12 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Edge Computing based Human-Robot Cognitive Fusion: A Medical Case Study in the Autism Spectrum Disorder Therapy Author…