定义递归值 C

defining recursive values C

 #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 中发生了什么吗?

第一个是带有一个参数的宏。当预处理器看到 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 只预处理文件,然后你可以查看文件并验证预处理器做了什么。