文章目录
- 一、类型检查增强 - 所有函数和变量必须有类型
- 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
请按任意键继续. . .