定义递归值 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
只预处理文件,然后你可以查看文件并验证预处理器做了什么。
#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
只预处理文件,然后你可以查看文件并验证预处理器做了什么。