这篇文章接续上一篇的话题
来纪录一些更加奇怪的写法以及如何解读
最後也会纪录一下我看过的一个 pointer to function 的例子
[]
跟 ()
优先於 *
例一:
int *ap[10];
基於原则 b) 应该解读成 array of pointers (array 先解读,再解读pointer)
而非 pointer of array
例二:
float *fp(float)
function (先解读(float)
) that returns a pointer (再解读float *
)
例三:
float (*fp)(int)
type of fp
:
(*fp)
因 a) 由内而外)int
argument (先解读 ()
)例四:
int *(*x[10])(void)
type of x
:
int f(int)[]; /*** WRONG ***/
不可回传 function
int g(int)(int); /*** WRONG ***/
array of funtionis 不成立,
个人的解读是,array 的每个 element 都要相同大小才行:
int a[10](int); /*** WRONG ***/
(但 array of function to pointer 是可以的)
在 xv6-riscv 中的 kernel/syscall.c:108 也用到了这种复杂的宣告:
static uint64 (*syscalls[])(void) = {
[SYS_fork] sys_fork,
[SYS_exit] sys_exit,
[SYS_wait] sys_wait,
[SYS_pipe] sys_pipe,
[SYS_read] sys_read,
[SYS_kill] sys_kill,
[SYS_exec] sys_exec,
[SYS_fstat] sys_fstat,
[SYS_chdir] sys_chdir,
[SYS_dup] sys_dup,
[SYS_getpid] sys_getpid,
[SYS_sbrk] sys_sbrk,
[SYS_sleep] sys_sleep,
[SYS_uptime] sys_uptime,
[SYS_open] sys_open,
[SYS_write] sys_write,
[SYS_mknod] sys_mknod,
[SYS_unlink] sys_unlink,
[SYS_link] sys_link,
[SYS_mkdir] sys_mkdir,
[SYS_close] sys_close,
};
syscalls
应该被解读成:
C Programming: A Modern Approach, 2/e
写Cucumber之前,先了解何谓 BDD(Behaviour-Driven Development...
我们经常会因爲种种问题误删了我们iphone里的照片或者影片。这篇文章我们将分享四个可以帮助你找回遗...
游戏示意 swift - tab功能分页 游戏页面排完版了 接下来就建立下方蓝色的分页吧 分页的功能...
Values 有写过任何一门程序语言的应该都知道,对於每个变数的值来说都会有其对应的资料型态,而在S...
前言: 在Activity 和 Fragment 只要操作 xml 的元件,在 onCreate 时...