C/C++:C语言中的__FILE__、__LINE__等几种C标准用法

news2024/12/29 10:24:26

C语言中的几种特殊标准定义

__FILE__ :正在编译文件的文件名

__LINE__ :正在编译文件的行号

__DATE__:编译时刻的日期字符串 如“Sep 22 2020”

__TIME__:编译时刻的时间字符串  如”10:00:00“

__STDC__:判断该文件是不是标准C程序

__func__:它指示所在的函数

标准C语言预处理要求定义某些对象宏,每个预定义宏的名称为两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。 

  • FILE‌:这是一个预处理宏,它在编译时会被替换为当前源代码文件的名称。这个宏通常用于在错误消息中提供发生错误的文件名,帮助开发者快速定位到具体的代码文件。
  • LINE‌:这也是一个预处理宏,它在编译时会被替换为当前源代码的行号。这个宏用于提供发生错误的行号,进一步精确到代码的具体行数,从而帮助开发者快速找到问题所在。

 1.__FILE__   编译文件名称

File中文意思即文件,这里的意思主要是指:正在编译文件对应正在编译文件的路径和文件的名称。

Keil版本对应的路径是相对于工程文件而言的路径,IAR版本路径是相对Windows路径。

源代码:

char BuildFile[] = __FILE__;
printf("编译文件路径:%s\n", BuildFile);

Keil:  编译文件路径:App\main.c

IAR:  编译文件路径:C:\Users\strongerHuang\Desktop\工程主目录\App\main.c

#include <stdio.h>
int main()
{
    printf("%s\n",__FILE__);
}

在gcc编译生成a.out,执行后输出结果为:

test.c

在windows的vc6.0下编译执行结果为:

c:\documents and settings\administrator\桌面\test.c

2.__LINE__   编译文件行号

上面说的是编译的文件名,是一个字符串,而这里说的是行号,是一个整型变量,这是这两者的区别,

比如在工程中添加源代码:

char BuildLine = __LINE__;
printf("编译代码所在行:%d\n", BuildLine);

可以看不是数组的字符串,打印信息:  编译代码所在行:44

一般情况下,__FILE__是和__LINE__结合一起使用,用于打印我们代码信息,方便快速定位代码位置。

#include <stdio.h>

main()
{
    printf("%d\n",__LINE__);
    printf("%d\n",__LINE__);
    printf("%d\n",__LINE__);
};

 该程序在linux用gcc编译,在windows的vc6.0下编译都可以通过,执行结果都为:

7

8

9

3.__DATE__   编译日期

__DATE__日期,需要注意的是:这个日期是你在编译时Windows系统的日期,如果对应那部分代码之前编译好了,后面没有编译,这个日期还是之前的日期,而不是后面编译的日期。因此,如果这里用于定版本,就需要在定版本时对工程进行全部重新编译,它才会更新至你最后编译的日期。

代码:

char BuildDate[] = __DATE__;
printf("编译日期:%s\n", BuildDate);

输出结果: 编译日期:Sep 22 2017

4.__TIME__   编译时间

这个和__DATE__一样的原理,编译时的时间,也是一个字符串。

再次提醒:用于定版本:需要重新编译,这样才是最后一次编译时间。

代码:

char BuildTime[] = __TIME__;
printf("编译时间:%s\n", BuildTime);

输出结果:编译时间:10:00:00

5.__STDC__   标准C代码

这个标准在我们单片机及嵌入式编程中运用的比较少,当要求程序严格遵循ANSIC标准时该标识符被赋值为1,主要是判断我们的程序文件是不是标准C程序。

#ifdef __STDC__
  printf("标准C代码文件\n");
#else
  printf("非标准C代码文件\n");
#endif

6.__func__   当前所在的函数的名称

使用 __func__ 可以简化代码的编写,以及便于在报错信息中定位问题。例如,当出现错误时,可以在报错信息中打印函数名称以更方便地追踪问题所在的代码。

#include <stdio.h>
 
int main() {
    printf("%s\n", __func__);
    return 0;
}

 输出结果为:mian

 

 

打印出来的结果是:

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

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

相关文章

网关功能介绍

在微服务架构中&#xff0c;网关&#xff08;API Gateway&#xff09;扮演着至关重要的角色&#xff0c;它作为客户端和微服务之间的中介&#xff0c;负责路由、过滤、认证、限流等职责。以下是一些常见的网关实现&#xff1a; Spring Cloud Gateway&#xff1a; Spring Cloud …

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境?

【佳学基因检测】网站加密证书失效后&#xff0c;如何移除并为新的证书安装准备环境&#xff1f; 当WoTrus DV Server CA证书失效后&#xff0c;你需要确保你的Nginx配置中不再引用该证书&#xff0c;并且移除或替换相关的证书文件。以下是具体步骤&#xff1a; 1. 确认Nginx…

如何在 cPanel 中使用 PuTTY SSH

cPanel & WHM 的直观网页界面使管理服务器和虚拟主机账户变得轻松。然而&#xff0c;有时在服务器命令行上工作也是很有用的。PuTTY SSH客户端允许您通过加密连接登录到服务器的命令行界面&#xff0c;从而确保敏感数据不会在互联网上暴露。Hostease 提供高性能的服务器&am…

Python | Leetcode Python题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…

【区块链 + 物联网】区块链边缘计算网关设备 | FISCO BCOS应用案例

目前边缘端设备主要以人工智能应用为主&#xff0c;或以数据采集网络设备为主&#xff0c;还未有区块链边缘计算网关设备&#xff0c;难以 在依托终端设备的传统行业中进行区块链 应用。本项目研制区块链边缘计算网关&#xff0c;将区块链、计算与网络集成 在一起&#xff0c;…

docker-compose安装mysql8集群

我这里一主两从mysql数据库集群,mysql镜像版本是8.0.39 如下 如下&#xff1a; [rootVM-20-8-centos mysqlData]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mysql-master …

【C题成品论文2已出】24数学建模国赛C题第二套成品论文(附参考代码)免费分享

假设&#xff1a;每个地块每年种植一种农作物。 针对问题一 单目标优化问题&#xff0c;定义决策变量&#xff0c;定义目标函数、定义约束条件、数据预处理、使用整数规划&#xff0c;编程解决问题。 定义决策变量&#xff1a; Xt,i&#xff1a;在第t年种植第i种作物的亩数…

如何规划Web项目

项目规划 规划步骤 1. 用户故事 从用户的角度描述应用程序的功能。所有用户故事放在一起描述了整个应用程序 2. 功能 3. 流程图&#xff08;我们将去构建什么&#xff09; 4. 架构&#xff08;我们如何去构建他&#xff09; 下一步就是开发步骤&#xff08;使用代码来实现我…

聊聊资源调度

资源调度 般分为两个阶段&#xff1a; 是实现物理资源的虚拟化&#xff08;即资源的抽象&#xff09;于当前机器的性能越来越好&#xff0c;硬件配置越来越高&#xff0c;直接用物理机跑业务比较浪费&#xff0c;所以将物理机分割成更小单位的虚拟机&#xff0c;这样可以显著提…

“人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB

重要更新 1. “人大金仓”正式更名为“电科金仓”&#xff0c;完整名称“中电科金仓&#xff08;北京&#xff09;科技股份有限公司”&#xff0c;突出金仓是中国电子科技集团有限公司在基础软件领域产品( [1] ) 。据悉人大金仓在上半年营收入为9056万元&#xff0c;净利润约21…

idea中配置Translation插件完成翻译功能

文章目录 idea下载插件配置有道云阿里云百度翻译开放平台 idea下载插件 idea中安装Translation插件 使用方法&#xff1a;右下角选择翻译引擎&#xff0c;鼠标选中想翻译的部分&#xff0c;右键翻译即可 之前一直用的微软的翻译&#xff0c;不需要配置&#xff0c;但是最近微软…

Unity Adressables 使用说明(七)诊断工具(Diagnostic tools)

Addressables 包含诊断工具&#xff0c;用于分析你的 Addressables setup、performance 和 build result 。 Addressables Profiler Module Addressables Profiler 是一个 Unity 编辑器 Profiler 模块&#xff0c;可以用来了解从 Addressables 加载的内容。 前提条件 必须启…

【LeetCode】06.Z字形变换

题目要求 解题思路 首先映入我们脑海的就是暴力。这一方法可行&#xff0c;但是时间复杂度空间复杂度很高&#xff0c;因此我们使用找规律的方法。这样的话我们可以模拟插入下标&#xff0c;这样的话很容易发现首行和末行插入的位置刚好是d2*n-2&#xff0c;而中间行的两个位置…

Linux环境中安装java环境(JDK8环境)

需求背景&#xff1a; 给国产服务器&#xff08;银河麒麟V10&#xff09;中安装项目运行环境&#xff0c;安装java环境&#xff01;具体如下 下载jdk包 访问Oracle官网下载jdk包&#xff1a;Java Downloads | Oracle 中国 选择对应的cpu架构进行下载 https://download.csdn.…

OpenCV视频处理练习案例-学习篇

需要实现的功能&#xff1a; 用OpenCV打开一段视频&#xff0c;将每一帧画面压缩成540p&#xff0c;对画面进行垂 直翻转&#xff0c;转为黑白&#xff0c;然后添加高斯噪声&#xff0c;把处理好的每一帧画面保存 成一个mp4文件保存到本地 Python代码如下&#xff1a; impor…

第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon

案例一&#xff1a; 权限维持-域环境&单机版-自启动 自启动路径加载 路径地址 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\ ##英文C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动\ ##中文…

Tensorflow常见激活函数 -- Tensorflow自学笔记10

激活函数 激活函数是用来加入非线性因素的&#xff0c;因为线性模型的表达能力不够。引入非线性激活函数&#xff0c;可使深层神经网络的表达能力更加强大。 一. 什么是优秀的激活函数&#xff1f; 优秀的激活函数应满足: 1. 非线性: 激活函数非线性时&#xff0c;多层神经网…

泛微E9 Ecology9-JS应用高级进阶视频教程(重磅)

泛微E9 Ecology9【JS 应用】高级进阶视频教程震撼登场&#xff01;点击下载 引言&#xff1a; 随着企业数字化转型的深入&#xff0c;掌握泛微E9的高级开发技能已经成为众多IT技术人员和企业信息化从业者不可或缺的竞争优势。而作为泛微E9二次开发中的重要组成部分&#xff0…

AVL 树的旋转

什么是 AVL 树&#xff1f; AVL 树是一种自平衡二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff0c;以其发明者 G. M. Adelson-Velsky 和 E. M. Landis 的名字命名。它的特点是对于任意一个节点&#xff0c;其左右子树的高度差&#xff08;平衡因子&#…

生成树协议(STP:802.1D、RSTP:802.1w、MSTP:802.1s)

在二层网络中&#xff0c;如果没有生成树协议&#xff0c;会带来哪些问题: 1、广播风暴 2、MAC地址表飘移 3、重复数据帧接收 回顾生成树有哪些术语: 1、根桥 为了破除环路&#xff0c;生成树网络首先要选举出一个首脑&#xff0c;头脑&#xff0c;首领。叫做根桥&#xff0c;…