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

刺骨的言语ヽ痛彻心扉 2023-10-14 22:51 207阅读 0赞

文章目录

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

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


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

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

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

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

代码示例 :

  1. #include <stdio.h>
  2. // 函数中参数没有写明类型
  3. // 也没有写返回值
  4. f(i)
  5. {
  6. printf("i = %d \n", i);
  7. }
  8. // 函数没有参数, 可以传入任意参数
  9. // 函数没有返回值类型, 但是可以返回返回值
  10. num()
  11. {
  12. return 1;
  13. }
  14. int main()
  15. {
  16. f(10);
  17. printf("num = %d \n", num(1, 2, 3));
  18. return 0;
  19. }

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

  1. C:\Users\octop\Desktop>gcc hello.c
  2. C:\Users\octop\Desktop>a.exe
  3. i = 10
  4. num = 1

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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


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

  1. // 使用 宏定义 定义布尔类型
  2. #define BOOL int
  3. #define TRUE 1
  4. #define FALSE 0
  5. // 使用 宏定义 定义一个布尔变量
  6. 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 ;

代码示例 :

  1. // 导入标准 io 流头文件
  2. // 其中定义了 std 命名空间
  3. #include <iostream>
  4. // 导入 std 命名空间
  5. using namespace std;
  6. void main()
  7. {
  8. // 声明 bool 变量
  9. bool b = true;
  10. // 打印 bool 变量的大小
  11. cout << "sizeof(b) : " << sizeof(b) << endl;
  12. // 打印 bool 变量的值
  13. cout << "b : " << b << endl;
  14. // 1. 为其赋值 10 会被当做 1 值为 true
  15. b = 10;
  16. // 打印 bool 变量的值
  17. cout << "b : " << b << endl;
  18. // 2, 为其赋值 -1 会被当做 1 值为 true
  19. // 负数也会被当做 1 , 转为 true
  20. b = -1;
  21. // 打印 bool 变量的值
  22. cout << "b : " << b << endl;
  23. // 3. 为其赋值 0 会被当做 0 值为 false
  24. b = 0;
  25. // 打印 bool 变量的值
  26. cout << "b : " << b << endl;
  27. system("pause");
  28. }

执行结果 :

  1. sizeof(b) : 1
  2. b : 1
  3. b : 1
  4. b : 1
  5. b : 0
  6. 请按任意键继续. . .

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,207人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言Bool类型

    在C99之前,C语言中没有定义Bool类型,但是在C99标准中将该类型添加了进来。首先来看看,C99中定义的Bool类型如何使用。 1. 基于C99标准,如何定义一个Bool

    相关 bool类型

    1.1. 为什么要用bool类型、 C++的编译器中,在使用BOOL、TRUE、FALSE等宏来表达现实世界中的二值事物,令我很不解,这这是一种“习惯”而已。 为什么要用内置

    相关 Go语言bool类型

    Go语言对于值之间的比较有非常严格的限制,只有两个相同类型的值才可以进行比较,如果值的类型是接口(interface),那么它们也必须都实现了相同的接口。如果其中一个值是常量,