【C++】C++ 语言对 C 语言的加强 ③ ( 类型检查增强 - 所有函数和变量必须有类型 | 新增 bool 类型 - bool 类型简介 )

news2024/9/23 17:15:20

文章目录

  • 一、类型检查增强 - 所有函数和变量必须有类型
    • 1、C 语言函数类型 - 函数参数与返回值类型可以不确定
    • 2、C++ 语言函数类型 - 函数参数与返回值类型必须写明
  • 二、新增 bool 类型 - bool 类型简介





一、类型检查增强 - 所有函数和变量必须有类型




1、C 语言函数类型 - 函数参数与返回值类型可以不确定


在 C 语言中 , 函数的返回值类型在定义时可以不写明 , 函数参数如果为空 , 可以任意传入参数 , 也不会报错 ;

下面的代码中 , 函数 f 没有返回值类型 , 也没有注明参数类型 , 接收参数后 , 仍然能正常打印出参数 ;

函数 num 没有注明返回值类型 , 但是可以返回 整型数值 1 , 函数参数为空 , 但是向函数中传入若干参数 , 也不会报错 ;


代码示例 :

#include <stdio.h>

// 函数中参数没有写明类型
// 也没有写返回值
f(i)
{
	printf("i = %d \n", i);
}

// 函数没有参数, 可以传入任意参数
// 函数没有返回值类型, 但是可以返回返回值
num()
{
	return 1;
}

int main()
{
	f(10);
	printf("num = %d \n", num(1, 2, 3));
	return 0;
}

执行结果 : 使用 gcc 编译器编译上述 C 语言源代码 , 然后执行编译结果 a.exe , 发现可以编译通过 , 并能成功执行 ;

C:\Users\octop\Desktop>gcc hello.c

C:\Users\octop\Desktop>a.exe
i = 10
num = 1

在这里插入图片描述


2、C++ 语言函数类型 - 函数参数与返回值类型必须写明


在 C++ 语言中 , 所有的 变量 和 函数 , 都必须有类型 ;

将上述 C 语言中的代码拷贝到 C++ 环境中 , 然后再次进行编译 , 发现一堆报错 ;

1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>Hello.cpp
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(5,3): error C2065: “i”: 未声明的标识符
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(5,4): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(6,1): error C2448: “f”: 函数样式初始值设定项类似函数定义
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(13,1): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(19,2): error C2064: 项不会计算为接受 1 个参数的函数
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(20,35): error C2660: “num”: 函数不接受 3 个参数
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(12,1): message : 参见“num”的声明
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(20,9): warning C4473: “printf”: 没有为格式字符串传递足够的参数
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(20,9): message : 占位符和其参数预计 1 可变参数,但提供的却是 0 参数
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(20,9): message : 缺失的可变参数 1 为格式字符串“%d”所需
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

在这里插入图片描述





二、新增 bool 类型 - bool 类型简介



C 语言中没有布尔值的概念 , 只有 0 和 1 的概念 , 使用 int 类型 + 宏定义 的形式表示布尔值 , 如下代码所示 ;

// 使用 宏定义 定义布尔类型
#define BOOL int
#define TRUE 1
#define FALSE 0

// 使用 宏定义 定义一个布尔变量
BOOL flag = FALSE;

C++ 语言在 C 语言的基础之上 , 新增了 布尔类型 , 类型名称是 bool ;


bool 布尔类型取值 : 取值有两个 true 和 false ;

  • true 表示真 , 在 编译器 内部使用 1 表示 ; 如果为 bool 变量赋值 非 0 的数值 ( 包括负数 ) , 会转为 true ;
  • false 表示假 , 在 编译器 内部使用 0 表示 ; 如果为 bool 变量赋值 0 , 会转为 false;

bool 布局类型占用内存空间 :

  • 一般情况下 , bool 类型变量 占用内存空间大小 1 字节 ;
  • 如果多个 bool 类型变量一起定义 , 编译器编译时会进行优化 , 每个 bool 变量占 1 位 , 也就是 1 bit , 8 bit 是 1 字节 Byte ;

下面的代码中 , 打印了 bool 类型变量的大小 1 字节 ;

  • 为 bool 类型变量赋值 非 0 的数值 , 都会被转为 true ;

  • 为 bool 类型变量赋值 0 , 才会被转为 false ;

代码示例 :

// 导入标准 io 流头文件
// 其中定义了 std 命名空间
#include <iostream>
// 导入 std 命名空间
using namespace std;

void main()
{
	// 声明 bool 变量
	bool b = true;
	// 打印 bool 变量的大小
	cout << "sizeof(b) : " << sizeof(b) << endl;
	// 打印 bool 变量的值
	cout << "b : " << b << endl;

	// 1. 为其赋值 10 会被当做 1 值为 true
	b = 10;
	// 打印 bool 变量的值
	cout << "b : " << b << endl;

	// 2, 为其赋值 -1 会被当做 1 值为 true
	// 负数也会被当做 1 , 转为 true
	b = -1;
	// 打印 bool 变量的值
	cout << "b : " << b << endl;

	// 3. 为其赋值 0 会被当做 0 值为 false
	b = 0;
	// 打印 bool 变量的值
	cout << "b : " << b << endl;

	system("pause");
}

执行结果 :

sizeof(b) : 1
b : 1
b : 1
b : 1
b : 0
请按任意键继续. . .

在这里插入图片描述

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

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

相关文章

arduino Xiao ESP32C3 oled0.96 下雪花

Xiao ESP32C3使用oled 0.96实现下雪的功能 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2 #include "oled.h" void …

Java反射机制 (秒懂百科)

一、什么是反射&#xff1f; 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问。。 反射是一种机制。对于任何一个类&#xff0c;都能知道这个类的所有属性和方法。对于任何一个对象&#xff0c;都能调用这个对象的所有属性和方法。这种动态获取类的信息和…

【推荐】深入浅出bean的生命周期

目录 1.spring 管理JavaBean的过程&#xff08;生命周期&#xff09; 2.spring的JavaBean管理中单例模式及原型&#xff08;多例&#xff09;模式 2.1 . 默认为单例&#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…

记录win 7旗舰版 “VMware Alias Manager and Ticket Service‘(VGAuhService)启动失败。

记录win 7旗舰版 "VMware Alias Manager and Ticket Service’(VGAuhService)启动失败。 描述如图 https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist?viewmsvc-140#visual-studio-2015-2017-2019-and-2022 安装对应版本的VC 库就可以解决问…

重磅Redis 7 发布,有哪些新特性?

Redis 7.2.0 现已发布&#xff0c;这是首个 Unified Redis Release。此版本包含一系列广泛的新功能&#xff0c;以及对人工智能计划功能支持的重大投资。 公告称&#xff0c;这是 “影响最深远的版本。在每一项增强功能中&#xff0c;你都能感受到一个强烈的主题&#xff1a;让…

idea使用docker生成镜像(打包镜像,导入镜像,导出镜像)

1&#xff1a;先下载安装dockerdesktop&#xff0c;安装成功后 2&#xff1a; 在cmd执行docker -v&#xff0c;查看安装的docker版本 C:\Users\dell>docker -v Docker version 24.0.5, build ced09963&#xff1a;需要启动 dockerdesktop应用&#xff0c;才算启动docker&a…

k8s基本概念、k8s对象、三个命令玩转所有的yaml写法、给vscode安装插件、kubectl和kubelet及自动补全

文章目录 1、K8S基本概念2、kubernetes Objects&#xff08;k8s对象&#xff09;2.1、定义2.2、对象的spec和status2.3、如何写任意资源的yaml&#xff08;以Pod为例&#xff09;2.4、pod的yaml文件2.5、k8s对象yaml的结构2.6、管理k8s对象2.7、对象名称2.8、名称空间2.9、标签…

Leetcode 0814周总结

本周刷题&#xff1a; 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果&#xff1a;nums1{1, 2, 2, 3, 5, 6} 思路&#xff1a;【双指针】对两个数组设置双指针&#xff0c;依次比较哪…

transform模型讲解

目录 game是游戏 与北京在一起&#xff1a;冬奥会 transform &#xff1a;encode&#xff0c;decode 12步骤 自注意力机制就是变形金刚的拆解对照&#xff1a;生成零部件V和权重K&#xff0c;前馈神经网络进行权重调节&#xff1a;初步变形 编码器Attention就是考虑上下文信…

Spring学习笔记+SpringMvc+SpringBoot学习笔记

壹、核心概念&#xff1a; 1.1. IOC和DI IOC&#xff08;Inversion of Control&#xff09;控制反转&#xff1a;对象的创建控制权由程序转移到外部&#xff0c;这种思想称为控制反转。/使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程种对象…

阿里云服务器扩容数据盘/系统盘小记

参考&#xff1a;扩容分区和文件系统&#xff08;Linux&#xff09; 阿里云的教程写的倒是详细&#xff0c;就是太细节&#xff0c;不利于阅读。 1 确认分区数据盘的属性 运行以下命令&#xff0c;确认待扩容云盘及其分区信息。 fdisk -lu设备&#xff1a; ①&#xff1a;云…

线性筛选素数

线性筛选素数 问题 求取范围[2,n] 之间的所有素数 方法一 方法一概述 使用数字prime[i]来标记i是否为素数。初始化prime[2…n]1。 当处理到数字i时&#xff0c;若prime[i]0&#xff0c;则代表2到i-1中有i的因子&#xff0c;因此i为合数&#xff1b;若prime[i]1&#xff0c…

美团——城市低空物流无人机的设计挑战与应对

城市低空物流无人机的设计挑战与应对 强度分析 振动影响 动力设计 噪声设计 冗余备份更加性价比&#xff0c;便宜好实现 航电系统 动力系统的冗余 电池系统的冗余 通讯系统等冗余 降落冗余 安全降落 计算高效 产线标定 底层基础库 离线系统 行业公开测评 未来展望 – 导航定…

C运行时错误——error realloc(): invalid next size

在LeetCode做题时遇到一个运行时错误&#xff0c;将引起问题的原因记录一下备忘&#xff1a; 我们在malloc或calloc等API分配内存时&#xff0c;libc库除了分配给我们在参数中设定大小的内存&#xff08;可能会有内存对齐&#xff0c;实际分配的比参数设定的要多&#xff09;&…

LeetCode算法递归类—二叉树中的最大路径和

目录 124. 二叉树中的最大路径和 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该…

STM32驱动OLED显示菜单功能(附带oled硬件iic驱动代码)

while循环里面就写菜单退出 菜单进入 static int flag1; //记录你的选择//if(return_FLAG1)return_FLAG0;OLED_GotoXY(10,0);OLED_Puts("1 LED_TEST",&Font_11x18,1);OLED_GotoXY(10,20);OLED_Puts("2 USART_TEST",&Font_11x18,1);OLED_GotoXY…

传输请求时,如若选择包含其他TR,请留意……

以下是纯顾问群~微信群&#xff1a;SAP干货铺&#xff0c;请联系本人微信 sapliumeng。QQ群 &#xff1a;SAP干货铺&#xff0c; 群号&#xff1a;775662808所有群管理严格&#xff0c;严格禁止一切外来链接、招聘、广告等垃圾信息! 这是之前頔哥在群里说过的一个知识点&#…

谷歌浏览器插件篇之console Importer

前言 作为一名前端开发者&#xff0c;相信在开发实践中&#xff0c;使用过诸多第三方库。譬如&#xff1a;lodash、moment、dayjs、antd等数不胜数。 然每每使用&#xff0c;经起繁琐&#xff0c;便令人有反抗之意。其步骤如下&#xff1a;首先要在搭建好的项目里&#xff0c…

Lnton羚通如何使用OpenCV-Python进行轮廓汇总?

在图像处理和计算机视觉领域&#xff0c;轮廓&#xff08;Contour&#xff09;是指图像中连续的边缘部分形成的曲线&#xff0c;可以看作是物体的外边界或者是物体内部区域的边界。轮廓可以用于对象检测、图像分割、形状匹配等任务。轮廓可以通过在二值化图像中找到图像中白色&…