在C程序的宏预处理器中调用内联函数

在C程序的宏预处理器中调用内联函数,c,c-preprocessor,C,C Preprocessor,我对以下宏预处理器定义感到困惑: #define HOOK_SYSCALL(NAME) original_##NAME = get_sys_call_table_addr()[__NR_##NAME]; 名为get_sys_call_table_addr()的函数的代码如下: ssize_t *sys_call_table = (ssize_t *)NULL; void** get_sys_call_table_addr(void) { void *swi_addr=(long *

我对以下宏预处理器定义感到困惑:

#define HOOK_SYSCALL(NAME) original_##NAME = get_sys_call_table_addr()[__NR_##NAME]; 
名为get_sys_call_table_addr()的函数的代码如下:

ssize_t *sys_call_table = (ssize_t *)NULL;

void** get_sys_call_table_addr(void)
{
    void *swi_addr=(long *)0xffff0008;
    unsigned long offset=0;
    unsigned long *vector_swi_addr=0;

    offset=((*(long *)swi_addr)&0xfff)+8;
    vector_swi_addr=*(unsigned long *)(swi_addr+offset);

    while(vector_swi_addr++)
    {
        if(((*(unsigned long *)vector_swi_addr)& 0xfffff000)==0xe28f8000)
        {
            offset=((*(unsigned long *)vector_swi_addr)& 0xfff)+8;
            sys_call_table=(void *)vector_swi_addr+offset;
            break;
        }
    }
    return (void **) sys_call_table;
}
我想问一下,这一行是否:

获取系统调用表地址()

是否将内联函数作为数组调用?就像我们对一种普通的数组所做的,例如数组[3]

谢谢

##
用于连接预处理器令牌。假设
名称
退出
。然后,
get\u sys\u call\u table\u addr()[\uuu NR\u35; NAME]
将被删除
get\u sys\u call\u table\u addr()[\u NR\u exit]
。这意味着将调用
get\u sys\u call\u table\u addr()
,计算结果将是一个指针

请记住,
arr[x]
*(arr+x)
。假设
\uu NR\u exit
是一个值为
1
的常数。然后,函数返回的结果指针移动
1
,然后取消引用。这将被分配给变量
original_exit

用于连接预处理器令牌。假设
名称
退出
。然后,
get\u sys\u call\u table\u addr()[\uuu NR\u35; NAME]
将被删除
get\u sys\u call\u table\u addr()[\u NR\u exit]
。这意味着将调用
get\u sys\u call\u table\u addr()
,计算结果将是一个指针

请记住,
arr[x]
*(arr+x)
。假设
\uu NR\u exit
是一个值为
1
的常数。然后,函数返回的结果指针移动
1
,然后取消引用。这将被分配给变量
original_exit

该令牌用于将两个令牌连接成一个。例如,在上面的示例中,NAME变成了NAME

函数get\u sys\u call\u table\u addr()返回一个表sys\u call\u table,它是一个双指针。此表应用作数组变量,并指向[\uuu NR\u NAME]所指的地址

换句话说,get_sys_call_table_addr()[[uuuu NR###NAME]变成sys_call_table[u NR#NAME]

令牌##用于将两个令牌连接成一个。例如,在上面的示例中,NAME变成了NAME

函数get\u sys\u call\u table\u addr()返回一个表sys\u call\u table,它是一个双指针。此表应用作数组变量,并指向[\uuu NR\u NAME]所指的地址


换句话说,get_sys_call_table_addr()[[uuuu NR###NAME]变成sys_call_table[u NR#NAME]

“称为”是什么意思?@immibis你是什么意思?我真的不明白,对不起!你说“它是以数组的形式调用函数吗?”,但这和“它是以鱼的方式驾驶汽车吗?”“调用”是什么意思?@immibis你是什么意思?我真的不明白,对不起!你说“它是以数组的形式调用函数吗?”,但这和“它是以鱼的方式驾驶汽车吗?”一样有道理。我的想法和你的答案一样,只是我找不到任何例子来解释在宏定义中调用的内联函数,这就是为什么我不确定它。谢谢你的回答!!=)我的想法和你的答案一样,只是我找不到任何例子来解释宏定义中调用的内联函数,这就是为什么我变得不确定。谢谢你的回答!!=)感谢您的回答,投票给@Arjun Sreedharan回答,因为他回答得更早。谢谢你的澄清,谢谢你的回答,投了@Arjun Sreedharan的票,因为他回答得更早。不过,感谢您的澄清=)