#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中发生的事情吗?
答案 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
来预处理文件,然后您可以查看该文件并验证预处理器的功能。