C语言记录程序日志

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

#include

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;
}

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

C语言记录程序日志_第1张图片#

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

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

#include

#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中使用#号是替换当前值所代表的字符串,不用#号是当前字符串的值。

C语言记录程序日志_第2张图片

#include

#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;
}

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

C语言记录程序日志_第3张图片

#include

#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就不适用了,需要换成%f
	float d = 3.14;
	print(d, "%f");
	return 0;
}

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

C语言记录程序日志_第4张图片

#include

#define HEBING(x,y,z) x##y##z    // 把xyz三个标识符合并成一个新的标识符

int main()
{
	int retab = 99;
	printf("%d", HEBING(ret, a, b));
}

你可能感兴趣的:(C语言学习记录,c语言,开发语言,数据结构,算法)