当前位置: 技术问答>linux和unix
用source insigt 看Linux0.11内核完全注释中的内核源码时,发现了一个有关c语言语法的奇怪现象。大虾请进,帮小弟解解惑。有重谢!
来源: 互联网 发布时间:2016-05-30
本文导语: 现象如下: 我先用source insight打开了源码,找到了fs/buffer.c ,然后看到了函数int sys_sync (void) ->sync_inodes() ->wait_on_inode() ->sleep_on()->panic()->sys_sync() (这里说明一下'->'符号表示函数调用)。注意到函数sys_sync (void)最后...
现象如下:
我先用source insight打开了源码,找到了fs/buffer.c ,然后看到了函数int sys_sync (void) ->sync_inodes() ->wait_on_inode() ->sleep_on()->panic()->sys_sync()
(这里说明一下'->'符号表示函数调用)。注意到函数sys_sync (void)最后又调回到自己。有必要提出的就是在panic()函数所在的文件中在它之前还有这么一条语句void sys_sync(void); 。
请教:
这属不属于c语言中所说的递归调用?如果不是又做何解释呢?再有,在c语言语法中是否可以实现两函数互调,如两个函数A,B,A调用B,然后B再调用A?
我先用source insight打开了源码,找到了fs/buffer.c ,然后看到了函数int sys_sync (void) ->sync_inodes() ->wait_on_inode() ->sleep_on()->panic()->sys_sync()
(这里说明一下'->'符号表示函数调用)。注意到函数sys_sync (void)最后又调回到自己。有必要提出的就是在panic()函数所在的文件中在它之前还有这么一条语句void sys_sync(void); 。
请教:
这属不属于c语言中所说的递归调用?如果不是又做何解释呢?再有,在c语言语法中是否可以实现两函数互调,如两个函数A,B,A调用B,然后B再调用A?
|
int sys_sync (void) ->sync_inodes() ->wait_on_inode() ->sleep_on()->panic()->sys_sync()
你这条路里肯定发生过条件跳转,不可能所有的sys_sync 都走回来吧。
可能是某些条件下又走回来而已。
你这条路里肯定发生过条件跳转,不可能所有的sys_sync 都走回来吧。
可能是某些条件下又走回来而已。
|
完全可以。
而且,从语法上来说,只要调用的函数存在、调用的方式和函数声明一致,就没有问题。
谁调用谁都可以,即使形成了死循环,也完全符合语法。
|
有什么关系呢?只要不变成死循环
c语言是灵活的。
不要只关注书本上的例子。
c语言是灵活的。
不要只关注书本上的例子。