C语言记录程序日志

我们写程序,不可能一次就写的一个bug都没有,必须要不停地修改,有可能自己调试已经没有问题了,发给客户后还是问题很多,这个时候跑到客户处解决问题就不现实了,自己不在还要找到问题的所在,最好的办法就是记录一下程序运行的日志了,只需要跟客户要下日志文件,自己就能定位错误的大概地方了,好提供更改的数据支持。好了,不说废话了,直接上代码:

#include<stdio.h>int main()
{FILE* pf = fopen("log.txt", "a+");if (pf == NULL){perror("打开文件失败!");return 1;}int i = 0;for (i = 0; i < 1000; i++){//  向日志文件中写入文件名,程序当前行号,当前日期,当前时间, 当前函数名和 变量i的值fprintf(pf, "文件名:%s  行号:%d   日期:%s  时间:%s  函数名:%s  i:%d  \n", __FILE__, __LINE__, __DATE__, __TIME__, __FUNCTION__, i);}fclose(pf);pf = NULL;return 0;
}

下面是程序运行完后日志文件的截图:

#

#define  现在的变量名  要替换的变量名

用define可以把一些特别长的名称改成特别短且好记好写的名称。

#include<stdio.h>#define CASE break;case
#define RZ printf("文件名:%s  行号:%d   日期:%s  时间:%s  函数名:%s  i:%d  \n", __FILE__, __LINE__, __DATE__, __TIME__, __FUNCTION__, i);int main()
{int i = 0;RZ         //此处就会打印日志信息,上面difine所代替的那些代码switch (i){case 1:CASE 2:   // 这里要用break;case代替,这样语法就正确了。
/*break;case 2:	
*/CASE 3:}
}

#号的使用,在define中使用#号是替换当前值所代表的字符串,不用#号是当前字符串的值。

#include<stdio.h>#define print(x) printf(" 当前 "#x" 的值是:%d \n",x)int main()
{int a = 10;print(a);int b = 20;print(b);int c = 30;print(c);return 0;
}

上面每次打印的都是整型,如果打印一个小数时这个方法就又不适用了,可以改成下面的设计:

#include<stdio.h>#define print(x) printf(" 当前 "#x" 的值是:%d \n",x)  
#define print(x, format) printf(" 当前 "#x" 的值是:" format" \n",x)  //把其中的%d 替换了int main()
{int a = 10;print(a, "%d");int b = 20;print(b, "%d");int c = 30;print(c, "%d");//如果打印小数的话原来的%d就不适用了,需要换成%ffloat d = 3.14;print(d, "%f");return 0;
}

##合并标识符,组成一个新的标识符

#include<stdio.h>#define HEBING(x,y,z) x##y##z    // 把xyz三个标识符合并成一个新的标识符int main()
{int retab = 99;printf("%d", HEBING(ret, a, b));
}

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

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

相关文章

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…

链表OJ练习(2)

一、分割链表 题目介绍&#xff1a; 思路&#xff1a;创建两个链表&#xff0c;ghead尾插大于x的节点&#xff0c;lhead尾插小于x的节点。先遍历链表。最后将ghead尾插到lhead后面&#xff0c;将大小链表链接。 我们需要在创建两个链表指针&#xff0c;指向两个链表的头节点&…

SpringBoot 整合 RabbitMQ

1. 创建 SpringBoot 工程 把版本改为 2.7.14 引入这两个依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springfr…

spring boot项目生成容器并运行

一个安静的周末&#xff0c;shigen又睡懒觉了&#xff0c;上次说的拖延症的惩罚来了&#xff1a;早晚各100个健腹轮练习&#xff0c;早上的已经完成了。今天的文章来的有点晚&#xff0c;但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件&#xff0c;生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示&#xff1a; 录制脚本&#xff0c;只是一个过渡&#xff0c;从0到1的一个过渡&#xff0c;如果让你直接写脚本&#xf…

iOS开发Swift-7-得分,问题序号,约束对象,提示框,类方法与静态方法-趣味问答App

1.根据用户回答计算得分 ViewController.swift: import UIKitclass ViewController: UIViewController {var questionIndex 0var score 0IBOutlet weak var questionLabel: UILabel!IBOutlet weak var scoreLabel: UILabel!override func viewDidLoad() {super.viewDidLoad()…

MySQL8.0.22安装过程记录(个人笔记)

1.点击下载MySQL 2.解压到本地磁盘&#xff08;注意路径中不要有中文&#xff09; 3.在解压目录创建my.ini文件 文件内容为 [mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] # 设置端口 port 3306 # 设计mysql的安装路径 basedirE:\01.app\05.Tool…

SpringBoot自定义消息总线

一、前言 在现代的分布式系统中&#xff0c;消息传递已成为一个非常流行的模式。它使得系统内的不同部分可以松耦合地通信&#xff0c;从而实现更高效、更可靠的应用程序。本博客将介绍SpringBoot如何提供简单易用的消息传递机制&#xff0c;并展示如何自定义消息总线以满足特定…

WSL中为Ubuntu和Debian设置固定IP的终极指南

文章目录 **WSL中为Ubuntu和Debian设置固定IP的终极指南****引言/背景****1. 传统方法****2. 新方法:添加指定IP而不是更改IP****结论**WSL中为Ubuntu和Debian设置固定IP的终极指南 引言/背景 随着WSL(Windows Subsystem for Linux)的普及,越来越多的开发者开始在Windows…

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代&#xff0c;HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大&#xff0c;接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能&#xff0c;接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…

MongoDB 的简介

MongoDB 趋势 对于 MongoDB 的认识 Q&A QA什么是 MongoDB&#xff1f; 一个以 JSON 为数据模型的文档数据库一个以 JSON 为数据模型的文档数据库文档来自于“JSON Document”&#xff0c;并非我们一般理解的 PDF&#xff0c;WORD谁开发 MongDB&#xff1f; 上市公司 MongoD…

第 3 章 栈和队列(单链队列)

1. 背景说明 队列(queue)是一种先进先出(first in first out,缩为 FIFO)的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端删除元素。 2. 示例代码 1&#xff09;status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果…