二、C到C++的升级
C++ 的加强主要表现在:类型的加强、面向对象支持
1、C++改进
C++更强调语言的实用性,所有的变量都可以再需要使用的时候再定义,C语言中的变量都必须在作用域开始的位置定义
int c = 0;
for (int i = 1; i < 3; i++)
{
    for (int j = 1; j < 3; j++)
    {
        c += i * j;
    }
}
register 关键字请求编译器将局部变量存储与寄存器中
在C++中依然支持
register关键字
C++ 编译器有自己的优化方式
C语言中无法获取
register变量的地址
C++中可以取得
register变量的地址C++编译器发现程序中需要取
register变量的地址时,register对变量的声明变得无效早期的C语言编译器不会对代码进行优化,因此
register变量是一个很好的补充
2、同名变量的处理
在C语言中,重复定义多个同名的全局变量是合法的。C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
在C++中,不允许定义多个同名的全局变量。
3、struct关键字的加强
C语言中的struct定义了一组变量的集合
C语言中的struct定义的标识符并不是一种新的类型
C++中的struct用于定义一个全新的类型
// C语言
typedef struct _tag_student Student;
// 将struct _tag_student类型起了一个别名Student
struct _tag_student{
	const char * name;
    int age;
}
// C++
// struct定义一个全新的类型
struct Student
{
    const char * name;
    int age;
};
4、小思考
int f()与int f(void)的区别:有没有区别,要看用什么编译器
- 如果用C语言编译器,前面的函数类型是返回值为int,接收参数是任意个数参数,后面的函数表示返回值为int,不接收任何参数
- 在C++中,这两种写法没有区别
5、默认类型
C++中所有的标识符都必须显示地声明类型
C语言中地默认类型在C++中是不合法的
f(i)
{
    printf("i = %d\n", i);
}
g()
{
    return 5;
}
在C语言中:
- int f()表示返回值为- int, 接收任意参数的函数
- f(void)表示返回值为- int的无参函数
在C++中:
- int f()和- int f(void)具有相同的意义,表示返回值为- int的无参函数
C++中无默认类型,如果没有参数,就是不接受任何参数,int f(void)只是为了兼容C语言
C++ 不接受无返回值类型的函数,不允许默认类型
#include <stdio.h>
// c++中,定义了一个新的类型Student
struct Student
{
    const char* name;
    int age;
};
// C++中有问题,不合法
f(i)
{
    printf("i = %d\n", i);
}
// C++不合法
g()
{
    return 5;
}
int main(int argc, char *argv[])
{
    Student s1 = {"Delphi", 30};
    Student s2 = {"Tang", 30};
    f(10);
    printf("g() = %d\n", g(1,2,3,4,5));
    return 0;
}
6、总结
C++更强调实用性,可以在任意的地方声明变量
C++中的register只是一个兼容C的作用
C++编译器能够更好地进行优化
C++中地任意标识符都必须显示地指明类型
二、C到C++的升级的更多相关文章
- sharepoint2007就地升级2010系列(二)环境概述及升级前准备
		环境介绍:1台2GB的虚机 现在是windows server 2008 sp2 X64 +SQL 2005+SQL2005 sp3+sharepoint2007+sharepoint2007SP2 ... 
- (十二).NET6 + React :升级!升级!还是***升级!!!+ IdentityServer4实战
		一.前言 此篇内容较多,我是一步一个脚印(坑),以至于写了好久,主要是这几部分:后台升级 .NET6 VS2022.前台升级Ant Design Pro V5 .前后台联调 IdentityServ ... 
- phpwind8.7升级9.0.1过程(二)8.7正式升级9.0
		首先备份 1. 给本地做备份将网站根目录下面的所有文件先做备份. 2. 给本地数据库做备份 3. 了解升级的具体过程 phpwind8.7升级到9.0需要首先升级到phpwind9.0的原生版本即:2 ... 
- HTML5进阶(二)HBuilder实现软件自动升级
		HBuilder实现软件自动升级 前言 移动APP开发好后需要实现软件自动升级功能,经过一番搜索,发现HBuilder具有"App资源在线升级更新"的功能,遂研究之. 经过一番测试 ... 
- 【iCore4 双核心板_ARM】例程三十二:UART_IAP_ARM实验——更新升级STM32
		实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. BIN升级文件产生方法: 1.编 ... 
- 【iCore3 双核心板】例程三十二:UART_IAP_ARM实验——更新升级STM32
		实验指导书及代码包下载: http://pan.baidu.com/s/1hrnLJwC iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ... 
- 【转】 基于TFTP协议的远程升级设计
		版权声明:本文为博主原创文章,未经博主允许不得转载.联系邮箱:zhzhchang@126.com 说明:由于CSDN博客编辑器对word格式近乎不支持,因此对表格使用了图片方式(最后一个表格未使用图片 ... 
- 基于TFTP协议的远程升级设计
		说明:因为CSDN博客编辑器对word格式近乎不支持.因此对表格使用了图片方式(最后一个表格未使用图片格式.大家能够看看效果),CSDN博客编辑器上传图片十分不人性化(直接复制图片是不显示的),因此本 ... 
- Windows AD域升级方
		前面的博客中我谈到了网络的基本概念和网络参考模型,今天我们来谈企业中常用的技术,Windows AD 域,今天我的笔记将重点讲解Windows AD 域的升级和迁移方法,通过3个小实验进行配置,真实环 ... 
- HTML5进阶(三)HBuilder实现软件自动升级(优化篇)
		HBuilder实现软件自动升级(优化篇) 前言 受前篇博客<HTML5进阶(二)HBuilder实现软件自动升级>(点击查看详情)的影响,测试过程中发现APP自动更新还是存在问题,第一次 ... 
随机推荐
- [Leetcode]009.Palindrome Number
			public class Solution { public boolean isPalindrome(int x) { if (x<0 || (x!=0 && x%10==0) ... 
- Codeforces Round #363 (Div. 2) C
			Description Vasya has n days of vacations! So he decided to improve his IT skills and do sport. Vasy ... 
- chapter09
			import java.io.File import java.nio.file._ import scala.collection.mutable.ArrayBuffer/** * Created ... 
- 【转】grunt动态生成文件名
			动态生成文件名 expand 设置为true打开以下选项 cwd 所有src指定的文件相对于这个属性指定的路径 src 要匹配的路径,相对与cwd dest 生成的目标路径前缀 ext 替换所有生成的 ... 
- ACdream 1236 Burning Bridges 割边 + 去重边
			题目就是求一副图的割边,然后对于那些有重复的边的,不能算做割边. 思路就是每次加入一条边的时候,判断这条边是否存在过,存在过的话,就把那条边设为inf,表示不能作为割边.于是有了这样的代码 #incl ... 
- python3+Appium自动化06-屏幕截图
			截图方法 save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置 driver.save_screenshot('login.png') get_screenshot_a ... 
- (转)CentOS(5.8/6.4)linux生产环境若干优化实战
			CentOS(5.8/6.4)linux生产环境若干优化实战 原文:http://blog.51cto.com/oldboy/1336488 特别说明:本文来自老男孩linux培训VIP学生学习笔记. ... 
- easyUI  鼠标悬停某行提示
			最近参与公司的电子档案系统的开发,需求是需要用户鼠标悬停某一行时,需要根据后台业务数据进行提示. 档案系统开发采用的框架是struts2+mybatis+spring+easyUI开发,而前端的e ... 
- windows 2012 r2 x64 安装IIS注意事项
			详细安装可以参考下面; https://jingyan.baidu.com/article/93f9803f234eade0e46f559f.html 下面只说一些注意事项,如果项目要用到wcf 的话 ... 
- [JQuery] Using skill in JQuery
			Using skill of JQuery 获取兄弟节点 $('#id').siblings() 当前元素的所有兄弟节点 $('#id').prev() 当前元素的前一个兄弟节点 $('#id').p ... 
