首页 > 解决方案 > lu 和 int 之间的算术似乎不正确

问题描述

对于我正在处理的个人项目,当我从 int 中减去 long unsigned 时,我似乎遇到了错误。

细节:

我 #define 一个将用于多个文件的值并将其设置为等于 256。这是我制作的结构的最大大小。

然后我 #define 另一个变量,它是结构中除列表之外的所有项目的大小。这个数字达到了 51。

在我创建的结构中,我使用这些#defined 变量来使用“块”中的其余空间创建一个列表。对于列表大小,这应该是 256 - 51。

当我打印整个结构的大小时,我得到 264。当我打印两个 #defined 变量之间的算术时,我得到正确的答案 205 (256 - 51)。

结构的大小应该是 256,我不知道为什么它不是那个大小。

任何帮助将不胜感激!

可重现的代码

测试.c:

#include "test.h"

int main(){
   //Prints 205, which seems correct
   printf("OUTPUT: %lu\n", (BLOCKSIZE-META));

   //Prints 264, which is wrong 
   printf("OUTPUT: %d\n", (int) sizeof(Inode));
   return 0;
}

测试.h

#include <stdio.h>
#include <time.h>

#define BLOCKSIZE 256
#define META (6 + 9 + (3 * (sizeof (int))) + (3 * (sizeof(time_t))))


typedef struct Inode {
   char a;
   char b;
   char c[9];
   int d;
   char e;
   char f;
   int g;
   int h;
   time_t i;
   time_t j;
   time_t k;
   char l;
   char m[BLOCKSIZE - META];
} Inode;

输出:

OUTPUT: 205
OUTPUT: 264

标签: c

解决方案


推荐阅读