请教:如何阅读宏定义的函数?
请教:如何阅读宏定义的函数?
很多开源代码,大量使用宏来定义函数, 这样的函数在使用SourceInSight阅读的时候,不认识该函数,无法完成函数跳转.阅读代码很不方便.
gcc -E 可以执行宏替换的功能,应该如何修改自带的Makefile文件,生成替换宏之后的代码呢? 我直接修改Makefile ,把 gcc 修改为gcc -E ,这样只是在屏幕上滚过替换后的代码.对于有数百个宏函数的代码来说,能否自动生成一份新的宏替换后的代码?
欢迎任何建议.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
/* 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
};
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之类的东西实现吗?
不太了解LZ说的宏定义的函数。是不是利用宏来实现类似于C++的函数模板的功能?这个做法我在qmail的代码中见过。apache的代码我没读过……
关于这种函数,我个人的经验是:
1 先看它的宏定义,了解这个宏的作用,之后,看到这个宏的时候,也就明白那个函数的作用了。其实这个类似C++的模板功能,它们两个可以做类比的
2 关于LZ说的修改Makefile问题,现在一般的开源软件都使用GNU工具来自动生成Makefile,因此,那个Makefile一般是不方便人阅读的。LZ如果想了解程序的配置、编译和连接过程,可以看configure.in(有的是叫做configure.ac)和Makefile.am这两个文件。具体的内容可以看automake autoconf autoscan autoheader这些程序的手册
>>
>>
>>你使用的什么版本的SourceInSight?我用的版本没你说的情况阿
>>另外,没有看明白你是要替换Makefile里的宏,还是源代码文件的宏
>>
>>
[ 本帖最后由 Bayweb 于 2006-8-2 23:03 编辑 ]
这样的代码比如 apache, zebra , ... ...