「C/C++」C/C++ 预处理 之 常用预处理宏

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明
「Math」探秘数学世界

目录

    • 1. `__LINE__`:
    • 2. `__func__`
    • 3. `__DATE__`:
    • 4. `__TIME__`:
    • 5. `__cplusplus`:
    • 6. `#line`(这是一个指令,而不是一个宏,但它与行号信息相关):

在C++中,__FILE__ 是一个常用的预处理宏,它用于获取当前文件的名称(字符串字面量)。除了 __FILE__ 之外,C++ 还提供了一些其他常用的预处理宏,它们可以帮助开发者在编译时获取有关源代码的信息。以下是一些常用的预处理宏:

1. __LINE__

  • 用途:获取当前代码行号(整数常量)。
  • 示例:#include <iostream> int main() { std::cout << "Line: " << __LINE__ << std::endl; return 0; }

2. __func__

(C++11及更高版本中推荐使用,部分编译器也支持__FUNCTION__作为非标准但广泛支持的替代):

  • 用途:获取当前函数的名称(字符串字面量)。
  • 示例:#include <iostream> void foo() { std::cout << "Function: " << __func__ << std::endl; }

3. __DATE__

  • 用途:获取当前文件的编译日期(字符串字面量,格式为 “Mmm dd yyyy”)。
  • 示例:#include <iostream> int main() { std::cout << "Date: " << __DATE__ << std::endl; return 0; }

4. __TIME__

  • 用途:获取当前文件的编译时间(字符串字面量,格式为 “hh:mm:ss”)。
  • 示例:#include <iostream> int main() { std::cout << "Time: " << __TIME__ << std::endl; return 0; }

5. __cplusplus

  • 用途:这是一个预定义的宏,当编译器以C++模式编译时,它会被定义。其值通常为某个表示C++标准版本的整数(如199711L表示C++98标准)。
  • 示例:#ifdef __cplusplus extern "C" { /* C代码 */ } #endif(用于在C++代码中嵌入C代码,以确保C代码以C的方式编译)。

6. #line(这是一个指令,而不是一个宏,但它与行号信息相关):

  • 用途:改变__LINE__和(在某些编译器中)__FILE__的值。这通常用于代码生成器或编译器前端,以在生成的代码中提供有意义的行号信息。
  • 示例:#line 100 "newfile.cpp"(将__LINE__的值更改为100,并将__FILE__的值更改为"newfile.cpp")。

这些预处理宏在调试、日志记录、代码生成等方面非常有用,因为它们提供了源代码级别的信息,有助于开发者定位和修复问题。请注意,这些宏的值是在编译时确定的,因此它们不能用于在运行时动态地获取源代码信息。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32mp2 RMII phy调试总结

stm32mp2 RMII phy调试总结 phy有两种提供clk的方式 1、mac直接提供50M clk给phy。 此时的pin连接 ETH1_CLK(stm32mp2端) --> RXC&#xff08;rtl8201f端&#xff09; 2、晶振提供25M clk给phy&#xff0c;phy在输出给50M给MAC 此时的pin连接 TXC&#xff08;rtl8201f端…

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

Flink-Kafka-Connector

Apache Flink 是一个用于处理无界和有界数据的开源流处理框架。它支持高吞吐量、低延迟以及精确一次的状态一致性等特性。Flink 社区提供了丰富的连接器&#xff08;Connectors&#xff09;以方便与不同的数据源进行交互&#xff0c;其中就包括了 Apache Kafka 连接器。 Apach…

Maven的依赖管理、传递、冲突、父子工程的继承和聚合

目录 一、基于IDEA 进行Maven依赖管理 (一)依赖管理概念 (二)Maven工程核心信息配置和解读&#xff08;GAVP&#xff09; (三)Maven工程依赖管理配置 1.依赖管理和依赖添加 2.依赖版本统一提取和维护 (四)依赖范围 (五)Maven工程依赖下载失败错误解决&#xff08;重点…

iOS SmartCodable 替换 HandyJSON 适配记录

前言 HandyJSON群里说建议不要再使用HandyJSON&#xff0c;我最终选择了SmartCodable 来替换&#xff0c;原因如下&#xff1a; 首先按照 SmartCodable 官方教程替换 大概要替换的内容如图&#xff1a; 详细的替换教程请前往&#xff1a;使用SmartCodable 平替 HandyJSON …

1.2 图像处理基本操作

在本实战中&#xff0c;我们将学习如何使用OpenCV进行基本的图像处理操作。首先&#xff0c;我们将通过cv2.imread()函数读取图像&#xff0c;并使用cv2.imshow()在窗口中显示它。接着&#xff0c;我们将探索如何通过cv2.imwrite()保存图像&#xff0c;并设置不同的参数以控制图…

Flink 状态精准一次性特性

Flink 的一个重大价值在于&#xff0c; 它既保证了 exactly-once &#xff0c;也具有低延迟和高吞吐 的处理能力 。 1.端到端&#xff08;End-To-End&#xff09;状态一致性 端到端的一致性保证&#xff0c;意味着结果的正确性贯穿了整个流处理应用的始终&#xff1b;每 一…

【图像去噪】论文精读:SUNet: Swin Transformer UNet for Image Denoising

请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 文章目录 前言AbstractI. INTRODUCTIONII. RELATE…

使用Python实现音频降噪

在音频处理领域&#xff0c;背景噪声是一个常见的问题。为了提高音频的质量&#xff0c;我们需要对音频进行降噪处理。本文将介绍如何使用 Python 实现音频降噪。 依赖库安装 在开始之前&#xff0c;我们需要安装以下依赖库&#xff1a; pydub&#xff1a;用于音频文件的读取…

从经典到应用:探索 AlexNet 神经网络

引言 在 2012 年&#xff0c;深度学习领域迎来了一个历史性时刻——AlexNet 的问世。由 Alex Krizhevsky 及其团队提出的 AlexNet 是一种深度卷积神经网络模型&#xff0c;它在 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中取得了突破性成果&#xff0c;将…

与AMD GPU上的对比语言-图像预训练(CLIP)模型交互

Interacting with Contrastive Language-Image Pre-Training (CLIP) model on AMD GPU — ROCm Blogs 2024年4月16日&#xff0c;由Sean Song撰写. 引言 对比语言-图像预训练&#xff08;CLIP&#xff09;是一种多模态深度学习模型&#xff0c;连接视觉和自然语言。它在Open…

I/O操作完成事件

本文内容由智谱清言产生。 在计算机编程中&#xff0c;I/O&#xff08;输入/输出&#xff09;操作完成事件是指一个I/O操作&#xff08;如读取文件、写入数据库、网络通信等&#xff09;已经完成的通知。这种事件通常由操作系统或框架生成&#xff0c;以通知应用程序或程序中的…

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto&#xff1a;Crypto-2&#xff1a;Crypto-3&#xff1a; 前言&#xff1a;本次比赛已经结束&#xff0c;用于赛后复现&#xff0c;欢迎大家交流学习&#xff01; Crypto&#xff1a; Crypto-2&#xff1a; …

下载mysql的jar,添加至jmeter中,编写jdbc协议脚本1106

下载jar包&#xff1a; 步骤1&#xff1a;进入maven仓库官网https://mvnrepository.com/ 步骤2&#xff1a;搜索实际的数据库 步骤3&#xff1a;点击 Mysql connnector/J 步骤5、查看数据库的版本号&#xff0c;选择具体版本&#xff0c;我的是mysql 8.0.16,下图&#xff0c;…

IntelliJ IDEA的快捷键

IntelliJ IDEA 是一个非常强大的集成开发环境&#xff0c;它提供了大量的快捷键来加速开发者的日常工作。这里为您整理了一份 IntelliJ IDEA 的快捷键大全&#xff0c;包含了编辑、导航、重构、运行等多个方面的快捷键。请注意&#xff0c;这些快捷键是基于 Windows 版本的 Int…

Rust:启动与关闭线程

在 Rust 编程中&#xff0c;启动和关闭线程是并发编程的重要部分。Rust 提供了强大的线程支持&#xff0c;允许你轻松地创建和管理线程。下面将详细解释如何在 Rust 中启动和关闭线程。 启动线程 在 Rust 中&#xff0c;你可以使用标准库中的 std::thread 模块来创建和启动新…

从“点”到“面”,热成像防爆手机如何为安全织就“透视网”?

市场上测温产品让人眼花缭乱&#xff0c;通过调研分析&#xff0c;小编发现测温枪占很高比重。但是&#xff0c;测温枪局限于显示单一数值信息&#xff0c;无法直观地展示物体的整体温度分布情况&#xff0c;而且几乎没有功能拓展能力。以AORO A23为代表的热成像防爆手机改变了…

模型训练中GPU利用率低?

买了块魔改华硕猛禽2080ti&#xff0c;找了下没找到什么测试显存的软件&#xff0c;于是用训练模型来测试魔改后的显存稳定性&#xff0c;因为模型训练器没有资源监测&#xff0c;于是用了Windows任务管理器来查看显卡使用情况&#xff0c;却发现GPU的利用率怎么这么低&#xf…

开源代码管理平台Gitlab如何本地化部署并实现公网环境远程访问私有仓库

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 本文主要介绍如何在Linux CentOS8 中搭建GitLab私有仓库并且结合内网穿透工具实现在公网…

在vue3的vite网络请求报错 [vite] http proxy error:

在开发的过程中 代理proxy报错: [vite] http proxy error: /ranking/hostRank?dateType1 Error: connect ETIMEDOUT 43.xxx.xxx.xxx:443 网络请求是http的: // vite.config.ts import { Agent } from node:http;server: {host: 0.0.0.0,port: port,open: true,https: false,…