C言語のプログラムログを記録する

プログラムを書くとき、バグを全く含まずに書くことは不可能であり、常に修正しなければなりません。自分でデバッグした後は問題がないかもしれませんが、顧客に送った後はまだ問題がたくさんあります。問題を解決するために顧客のところに行くのは現実的ではありません。問題を自分で見つける必要がない場合、最良の方法は、実行中のプログラムのログを記録することです。ログ ファイルをダウンロードするだけで済みます。顧客に問い合わせると、エラーのおおよその位置を特定して、変更に対するデータ サポートを提供できます。さて、ナンセンスな話はやめて、コードに直接進みましょう。

#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 現在の変数名 置換する変数名

定義を使用すると、特に長い名前の一部を、覚えやすく書きやすい非常に短い名前に変更できます。

#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:

	}
}

# 記号の使用。定義で # 記号を使用すると、現在の値で表される文字列が置き換えられます。# 記号を使用しないと、現在の文字列の値が置き換えられます。

#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就不适用了,需要换成%f
	float 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));
}

おすすめ

転載: blog.csdn.net/xingyuncao520025/article/details/132645075