暑假c++学习打卡02-7.14 #ifndef与#endif

本文介绍了C++11的新特性,包括使用nullptr替代NULL作为指针初始化,讲解了分离式编译的概念,以及extern关键字的作用。此外,还探讨了constexpr的用法,特别是与指针结合的情况。同时,文章解释了预处理指令ifdef和ifndef在防止头文件重复包含中的应用,强调了它们在确保代码一致性中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于C++11的一些新变动

nullpter:C++11新标准刚刚引如的一种方法,在C++中,对指针进行初始化赋值,nullpter比NULL要好的多

分离式编译:C++语言支持分离式编译机制,允许将程序分割成若干个文件,每个文件可被独立编译。C++将申明和定义区分开来,一个文件若想使用别处定义的名字则必须包含对那个名字的申明
申明关键字extern

constexpr:C++11新标准规定,允许将变量声明为constexpr来验证变量的值是否位一个常量表达式。

constexpr与指针:

const int *p = nullptr;
constexpr int *q = nullptr;

这两者完全不同,p是一个指向常量的指针,而q是一个常量指针。即p所指向的对象的值不可改变,p的值可以改变。而q的值不可改变,但其指向的对象则可以。

ifdef与#ifndef:

这两个指令分别检查某个指定的预处理变量是否已经定义:
#ifdef当且仅当变量已定义时为真
#ifndef当且仅当变量未定义时为真
一旦检查结果为真,则执行后续操作直至遇到#endif为止。

#ifndef SALSES_DATA_H
#define SALSES_DATA_H

```cpp
#include<string>
struct Sales_data
{
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
};
#endif

作用:为了确保各个文件中类的定义一致,类通常被定义在头文件之中,而且类所在的头文件的名字应该和类的名字一样。例如将Sales_data类定义在名为Sales_data.h的头文件中。
**而SALSES_DATA_H这个全是大写的名字**,被定义为变量后,如果再一次使用此头文件,那么根据#ifndef的规则,他将直接跳过<string>的使用,避免头文件的重复使用。而为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写。
**一般来说,程序员只要习惯性加上这些保护符即可,不必太在乎程序是否真的需要**

之前在ACM队的时候,总是看到一些大佬们加这#ifndef,#endif什么的,当初还以为这个是什么特别高级的东东,现在回头再看这个概念,才明白当初的自己对C++只是了解了一个大概,C++的学习切忌浮躁啊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值