【C语言】(26)预定义符号

核心预定义符号

  • __FILE__:字符串类型,表示当前源代码文件的名称。
  • __LINE__:整型,表示当前源代码的行号。
  • __DATE__:字符串类型,表示源文件被编译的日期,格式为 "MMM DD YYYY"
  • __TIME__:字符串类型,表示源文件被编译的时间,格式为 "HH:MM:SS"
  • __FUNCTION__:在C99标准中未定义,但许多编译器提供支持,表示当前函数名称的字符串。
  • __STDC__:整型,如果编译器遵循ANSI C标准,则定义该宏。
  • __STDC_VERSION__:长整型,表示遵循的C标准的版本。例如,C99标准是199901L
  • __func__:C99标准新增,字符串类型,表示当前函数名称。

编译器特定预定义符号

  • __VERSION__:在一些编译器中定义,包含编译器的版本字符串。
  • __clang__:在Clang编译器中定义,可以用来检测代码是否被Clang编译器编译。
  • __GNUC____GNUC_MINOR____GNUC_PATCHLEVEL__:在GCC中定义,分别表示GCC的主版本号、次版本号和补丁级别。
  • _MSC_VER:在Microsoft Visual C++编译器中定义,展开为一个表示编译器版本号的整数。
  • __EXCEPTIONS:在支持异常的C++环境中定义,如果编译器支持异常处理,则定义此宏。
  • __cplusplus:在C++代码中定义,表示C++标准的版本,例如,C++11是201103L
  • __BORLANDC__:在Borland C++编译器中定义,表示Borland C++编译器的版本。
  • _WIN32:在Windows平台上编译时定义,表示代码在Windows环境下编译。
  • __linux__:在Linux平台上编译时定义,表示代码在Linux环境下编译。

应用示例

预定义宏广泛用于条件编译、环境检测和调试信息的生成。例如,使用__FILE____LINE__打印错误发生的文件和行号:

fprintf(stderr, "Error occurred at %s:%d\n", __FILE__, __LINE__);

或者,根据不同的操作系统编写特定的代码段:

#ifdef _WIN32// Windows-specific code
#elif defined(__linux__)// Linux-specific code
#endif

注意事项

  • 使用预定义宏时,需要了解目标编译器是否支持这些宏。
  • 预定义宏提供了编译时环境的快照,它们不会随着程序的运行而改变。
  • 在跨平台编程时,应谨慎使用特定编译器的预定义宏,以保持代码的可移植性。

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

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

相关文章

sqlserver union 和union all

在 SQL Server 中,UNION 和 UNION ALL 是用于合并两个或多个 SELECT 查询结果的操作符。 UNION: UNION 操作符用于合并两个或多个 SELECT 查询的结果,并去除重复的行。如果两个查询的结果集中有相同的行,则只会返回一个。语法如下&#xff1…

数据结构-邻接矩阵

介绍 邻接矩阵,是表示图的一种常见方式,具体表现为一个记录了各顶点连接情况的呈正方形的矩阵。 假设一共有以下顶点,其连接关系如图所示 那么,怎么表示它们之间的连接关系呢? 我们发现,各条边所连接的都…

你知道专业4S店神秘顾客是如何砍价的吗?

在汽车市场中,神秘顾客调研已经成为评估销售服务质量和客户体验的重要手段。通过神秘顾客的实地探访,品牌方和销售商可以获取真实、客观的反馈意见,从而针对性地改进服务。另外神秘顾客在执行过程中还可以通过砍价的方式了解该门店是否出现价…

C语言题目:一些简单的编程和递归题目

以下的题目的较难的点都在注释里面讲解清楚了 一. 1.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。 代码实现: int main() {int money 20;int price 1;int e…

C#,二进制数的非0位数统计(Bits Count)的算法与源代码

计算一个十进制数的二进制表示有多少位1? 1 遍历法(递归或非递归) 使用循环按位统计1的个数。 2 哈希查表法 利用一个数组或哈希生成一张表,存储不同二进制编码对应的值为1的二进制位数,那么在使用时,只…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第10章 项目进度管理(五)

博主2023年11月通过了信息系统项目管理的考试,考试过程中发现考试的内容全部是教材中的内容,非常符合我学习的思路,因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家,希望更多的人能够通过考试&a…

华为OD机试真题- 攀登者2-2024年OD统一考试(C卷)

题目描述: 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。地图表示为一维数组,数组的索引代表水平位置,数组的高度代表相对海拔高度。其中数组元素0代表地面。例如[0,1,4,3,1,0,0,1,2,3,1,2,1,0], 代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5和8,9,1…

「优选算法刷题」:判定字符是否唯一

一、题目 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true限制&#xff1a; 0 < len(s) < 100 s[i]仅包含小写字母 二…

控制程序执行流程

资源 资源下载 【免费】突破密码认证程序&#xff08;修改函数返回地址&#xff09;资源-CSDN文库 资源内容 源码 在上一篇文章里 修改函数返回地址-CSDN博客 流程 对程序进行编译 思路 了解栈的情况&#xff08;函数地址、缓冲区偏移量&#xff09;程序中密码认证的地…

SHERlocked93 的 2023 年终总结

工作之后感觉一年一年过的太快&#xff0c;没有个记录连回忆都无从回忆起&#xff0c;之前的年终总结&#xff1a; SHERlocked93 的 2022 年终总结SHERlocked93 的 2021 年终总结SHERlocked93 的 2020 年终总结SHERlocked93 的 2019 年终总结SHERlocked93 的 2018 年终总结SHER…

js设计模式:发布订阅模式

作用: 也称之为消息队列模式,或者pubsub模式 发布者发布消息(也可以理解为调用某函数),订阅者会收到消息,并且发布者可以将一些参数传递给订阅者。 是一种常用的参数传递方法,经典的pubsub.js,vue2中的$bus等都是用的这种模式。 示例: <!DOCTYPE html> <html lan…

模仿 STM32 驱动开发格式实验

1.模仿 STM32 寄存器定义 为了开发方便&#xff0c; ST 官方为 STM32F103 编写了一个叫做 stm32f10x.h 的文件&#xff0c;在这个文件 里面定义了 STM32F103 所有外设寄存器&#xff0c;我们可以使用其定义的寄存器来进行开发&#xff0c;比如我 们可以用如下代码来初始…

kube-ovn默认vpc

下面图是kube-ovn默认vpc的拓扑 默认vpc kube-ovn安装完成后会自带一个默认vpc是ovn-cluster&#xff0c;并且会在这个默认vpc下创建ovn-default子网、join子网&#xff0c; 默认子网 ovn-default是ovn-cluster下的默认子网&#xff0c;在创建pod时没有指定子网时会使用这个…

Python编程中的异常处理

什么是异常&#xff1f; 程序错误&#xff08;errors&#xff09;有时也被称为程序异常&#xff08;exceptions&#xff09;&#xff0c;这是每个编程人员都会经常遇到的问题。在过去&#xff0c;当遇到这类情况时&#xff0c;程序会终止执行并显示错误信息&#xff0c;通常是…

JAVA之Java线程核心详解

Java线程核心 1.进程和线程 进程&#xff1a;进程的本质是一个正在执行的程序&#xff0c;程序运行时系统会创建一个进程&#xff0c;并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时&#xff0c;在 CPU 对进程做时间片的切换时&#xff0c;保证进程…

QT安装-多版本

下载下载器 Qt开发技巧之快速安装多版本Qt_qt安装多版本-CSDN博客 无法下载存档bug-更换镜像源 windows安装QT时出现“无法下载存档……”解决办法 - lmore - 博客园 (cnblogs.com)

微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

探索ES6:JavaScript的下一代标准

文章目录 探索ES6&#xff1a;JavaScript的下一代标准1. let 和 const2. Arrow Functions&#xff08;箭头函数&#xff09;3. 模板字符串4. 解构赋值5. 类和模块 探索ES6&#xff1a;JavaScript的下一代标准 ES6&#xff0c;也称为ECMAScript 2015&#xff0c;是JavaScript的…

穿越网络迷雾:OSI网络层的全面探索与未来展望

1. 网络层的基本概念和功能 OSI&#xff08;开放式系统互连&#xff09;模型的网络层位于第三层&#xff0c;主要负责在多个网络间转发数据包&#xff0c;确保数据能够从源头到达目的地。网络层的基本功能包括&#xff1a; 路由选择 &#xff1a;确定数据从源到目的地的路径。…

猫头虎博客分享:深入解析 Visual Studio Code 1.86 版本新特性

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …