定义递归值C.

时间:2015-06-20 23:20:56

标签: c macros

 #define BLOCK_OFFSET(block) (BASE_OFFSET+(block-1)*block_size)

使用

        lseek(fd, BLOCK_OFFSET(group->bg_inode_table)+(inode_no-1)*sizeof(struct ext2_inode),SEEK_SET);

这是我试图理解的代码片段,我不知道该定义的工作原理。 它是递归的吗? 有人可以一步一步地解释那个lseek中发生的事情吗?

1 个答案:

答案 0 :(得分:1)

第一个是带有一个参数的宏。当预处理器看到BLOCK_OFFSET(...)时,它会被(BASE_OFFSET+(...-1)*block_size)

替换
#define BLOCK_OFFSET(block) (BASE_OFFSET+(block-1)*block_size)

第二个是如上所述的宏的使用:

在预处理之前:

lseek(fd, BLOCK_OFFSET(group->bg_inode_table)+(inode_no-1)*sizeof(struct ext2_inode),SEEK_SET);

预处理后:

lseek(fd, (BASE_OFFSET+(group->bg_inode_table-1)*block_size)+(inode_no-1)*sizeof(struct ext2_inode),SEEK_SET);

如果您使用gcc,您可以使用gcc -E file.c来预处理文件,然后您可以查看该文件并验证预处理器的功能。