Perl背包客日记(1):为源码文件所有函数添加 access log
Perl背包客日记(1):为源码文件所有函数添加 access log
[*]作者:苏
[*]原文链接:blog.csdn.net/prevention
~
如果你有一系列 C 源文件,想为每个函数添加一句 access log,来方便的知道函数执行流程的话,这篇文章会告诉你一个特定范例下的实践方式。
下面是本文中的 C 源文件格式范例:
void
function1(int a, int b)
{
...
}
static int
_function2()
{
...
}
static char*
function3(char b, int x, double z)
{
...
}
typedef struct{
int x;
int y;
char z;
} some_type;
(本文来自:blog.csdn.net/prevention)简单地说,就是类似于 Nginx 等优秀 C 开源项目的源文件书写风格。加上一句 access log 后变为:
void
function1(int a, int b)
{//printf("zc: function1\n")
...
}
static int
_function2()
{//printf("zc: _function2\n")
...
}
static char*
function3(char b, int x, double z)
{//printf("zc: function3\n")
...
}
typedef struct{
int x;
int y;
char z;
} some_type;
如何实现呢?肯定要用到:
[*]File IO;
[*]regex;
@files = glob "*.c";
foreach $arg (@files) {
open SRCFILE, "<:encoding(UTF-8)", $arg;
open DSTFILE, ">:encoding(UTF-8)", "../" . $arg;
$ready = !!0;
select DSTFILE;
foreach (<SRCFILE>) {
if (!$ready && /\A(.+)\(.*\)\n/s) {
$funcname = $1;# . "\n";
$ready = !!1;
print $_;
} elsif (/\A\{\n/s) {
print "{//printf(\"zc: " . $funcname . "\\n\")" . "\n"; # write this string into the dst file
$ready = !!0;
} else {
print $_;
}
}
$| = 1;
select STDOUT;
close DSTFILE;
close SRCFILE;
}
上面的知识点有:
[*]open 输入和输出(《Perl语言入门》P102)
[*]改变默认的文件输出句柄(《Perl语言入门》P111)
[*]foreach 循环控制(《Perl语言入门》P187)
[*]glob
[*]数组
[*]布尔值小技巧
[*]正则表达式
[*]字符串连接
~
原文链接:blog.csdn.net/prevention
~
页:
[1]