Perl背包客日记(1):为源码文件所有函数添加 access log

Perl背包客日记(1):为源码文件所有函数添加 access log

~

如果你有一系列 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;
}

上面的知识点有:

  1. open 输入和输出(《Perl语言入门》P102)
  2. 改变默认的文件输出句柄(《Perl语言入门》P111)
  3. foreach 循环控制(《Perl语言入门》P187)
  4. glob
  5. 数组
  6. 布尔值小技巧
  7. 正则表达式
  8. 字符串连接

~

原文链接:blog.csdn.net/prevention

~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值