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




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

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


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==========

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





二、新增 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
请按任意键继续. . .

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

08-20 07:42