C++23新特性_#warning 预处理指令

文章目录

  • [第一章 C++23语言特性](#第一章 C++23语言特性)
    • [1.4 #warning 预处理指令](#warning 预处理指令)
      • [1.4.1 作用和语法格式](#1.4.1 作用和语法格式)
      • [1.4.2 #error 与 #warning 和 [[deprecated]]对比](#error 与 #warning 和 [[deprecated]]对比)
      • [1.4.3 使用示例](#1.4.3 使用示例)

本文介绍C++23新特性之#warning 预处理指令。

第一章 C++23语言特性

1.4 #warning 预处理指令

在C++23之前,几乎所有的主流编译器(GCC, Clang, MSVC)都支持#warning指令,用来在编译期间发出自定义警告。

C++ 23 将这一广泛存在的扩展纳入标准,无论使用什么编译器, 都可以使用#warning。

1.4.1 作用和语法格式

语法格式如下:

cpp 复制代码
#warning "Message text"
// 或者不带引号(取决于具体实现,但标准推荐文本形式)
#warning Message text 

作用:当预处理器遇到这行指令时,会向控制台(或输出窗口)打印指定的文本,并将其标记为"警告"(Warning),不会像 #error 那样中断编译。

1.4.2 #error 与 #warning 和 [[deprecated]]对比

与#error区别:它们都是在广义的编译期间进行的

#error:致命错误。编译立即停止。用于"如果不解决这个问题,程序绝对无法运行"的场景。

#warning:提示信息。编译继续。用于"这里有个问题你需要注意,但暂时不影响程序构建"的场景。

\[deprecated\]\] 表示这是一个过时的函数,类,变量,在编译期间触发警告。 #### 1.4.3 使用示例 示例1:标记"尚未完成的功能" ```cpp void complex_algorithm() { #ifdef _DEBUG // 开发阶段提醒自己,这个算法还没优化 #warning "Performance: This algorithm is O(n^3), needs optimization before release!" #endif // 未优化的代码 } void test() { complex_algorithm(); } ``` 编译输出: warning: Performance: This algorithm is O(n\^3), needs optimization before release! 示例2:检验配置或环境风险 检测某些不推荐的设配时,可以使用#warnning提醒。 ```cpp // 检查是否开启了某些实验性特性 #if defined(ENABLE_EXPERIMENTAL_FEATURES) #warning "Experimental features are enabled. API stability is not guaranteed." #endif ``` 示例3:头文件的移除提醒 假如想告诉使用者某个头文件即将被移除,但又不想破坏它们的建构(使用#error),也不想等它们调用函数时才发现,可以在头文件顶部写一个警告。 ```cpp // old_header.h #ifndef OLD_HEADER_H #define OLD_HEADER_H // 只要用户 #include 这个文件,就会看到警告 #warning "这个文件即将被移除,请使用新文件 " #include "new_header.h" #endif ```

相关推荐
2401_8920709817 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei17 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
不爱吃炸鸡柳18 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发18 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
‎ദ്ദിᵔ.˛.ᵔ₎18 小时前
STL 栈 队列
开发语言·c++
2401_8920709818 小时前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
郭涤生18 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿18 小时前
vector
c语言·开发语言·数据结构·c++·算法
cccyi719 小时前
【C++ 脚手架】etcd 的介绍与使用
c++·服务发现·etcd·服务注册
liu****19 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯