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 "这个文件即将被移除,请使用新文件 <new_header.h>"

#include "new_header.h"

#endif
相关推荐
无名猿22 分钟前
nullptr 取代 NULL 和 0:空指针的三种写法和唯一正确解
c++·现代c++·语法基础·踩坑记录
大侠归来26 分钟前
C++ 与 Lua 的协程交互:从原理到实战
c++·lua·交互
无名猿34 分钟前
size_t 与 int 混用陷阱:有符号无符号比较与整数提升
c++·标准库·语法基础·踩坑记录
.道阻且长.38 分钟前
C++ 11:可变参数模板
前端·c++·算法
m0_3807438744 分钟前
Qt实现调用相机进行拍照并进行图像处理
开发语言·c++
励志不掉头发的内向程序员3 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
蒸蒸yyyyzwd9 小时前
秋招学习笔记 day46
c++·八股
码匠许师傅13 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿14 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
2601_9622186115 小时前
C++中decltype关键字的实现
开发语言·c++