请教:如何阅读宏定义的函数?

发布于 2022-07-22 06:47:41 字数 361 浏览 8 评论 5

请教:如何阅读宏定义的函数?

很多开源代码,大量使用宏来定义函数, 这样的函数在使用SourceInSight阅读的时候,不认识该函数,无法完成函数跳转.阅读代码很不方便.

gcc -E 可以执行宏替换的功能,应该如何修改自带的Makefile文件,生成替换宏之后的代码呢?  我直接修改Makefile ,把 gcc 修改为gcc -E ,这样只是在屏幕上滚过替换后的代码.对于有数百个宏函数的代码来说,能否自动生成一份新的宏替换后的代码?

欢迎任何建议.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清引 2022-07-26 06:38:57

/* DEFUN for vty command interafce. Little bit hacky ;-). */
#define DEFUN(funcname, cmdname, cmdstr, helpstr)
  int funcname (struct cmd_element *, struct vty *, int, char **);
  struct cmd_element cmdname =
  {
    cmdstr,
    funcname,
    helpstr
  };
  int funcname
  (struct cmd_element *self, struct vty *vty, int argc, char **argv)

/* DEFUN_NOSH for commands that vtysh should ignore */
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr)
  DEFUN(funcname, cmdname, cmdstr, helpstr)

/* DEFSH for vtysh. */
#define DEFSH(daemon, cmdname, cmdstr, helpstr)
  struct cmd_element cmdname =
  {
    cmdstr,
    NULL,
    helpstr,
    daemon
  };

/* DEFUN + DEFSH */
#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr)
  int funcname (struct cmd_element *, struct vty *, int, char **);
  struct cmd_element cmdname =
  {
    cmdstr,
    funcname,
    helpstr,
    daemon
  };
  int funcname
  (struct cmd_element *self, struct vty *vty, int argc, char **argv)

/* ALIAS macro which define existing command's alias. */
#define ALIAS(funcname, cmdname, cmdstr, helpstr)
  struct cmd_element cmdname =
  {
    cmdstr,
    funcname,
    helpstr
  };

舂唻埖巳落 2022-07-26 04:27:36

TO Bayweb: 是代码里面的宏, SourceInSinght 3.5

To 默难:
宏函数定义:
#define DEFUN(arg1,arg2,arg3,...) arg1( int arg2, char * arg3,... )

然后定义一个新的函数的时候:
DEFUN( str_1, str_2, str_3, ... )
{
// real func code
}

这样定义的函数没法在SourceInSight阅读的时候自动跳转该函数的实现代码处,很不方便. 我希望能把函数 宏替换后形成这个样子的普通函数:

str_1( int str_2, char * str_3, ... )

请问能通过修改Makefile 或其他的makefile.am之类的东西实现吗?

安稳善良 2022-07-25 17:19:27

不太了解LZ说的宏定义的函数。是不是利用宏来实现类似于C++的函数模板的功能?这个做法我在qmail的代码中见过。apache的代码我没读过……

关于这种函数,我个人的经验是:
1 先看它的宏定义,了解这个宏的作用,之后,看到这个宏的时候,也就明白那个函数的作用了。其实这个类似C++的模板功能,它们两个可以做类比的
2 关于LZ说的修改Makefile问题,现在一般的开源软件都使用GNU工具来自动生成Makefile,因此,那个Makefile一般是不方便人阅读的。LZ如果想了解程序的配置、编译和连接过程,可以看configure.in(有的是叫做configure.ac)和Makefile.am这两个文件。具体的内容可以看automake autoconf autoscan autoheader这些程序的手册

逆光飞翔i 2022-07-23 07:35:35

原帖由 liusz 于 2006-8-2 22:51 发表
请教:如何阅读宏定义的函数?

很多开源代码,大量使用宏来定义函数, 这样的函数在使用SourceInSight阅读的时候,不认识该函数,无法完成函数跳转.阅 ...

>>
>>
>>你使用的什么版本的SourceInSight?我用的版本没你说的情况阿
>>另外,没有看明白你是要替换Makefile里的宏,还是源代码文件的宏
>>
>>

[ 本帖最后由 Bayweb 于 2006-8-2 23:03 编辑 ]

白馒头 2022-07-22 16:37:20

这样的代码比如 apache, zebra , ... ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文