c - 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
解决方案
推荐阅读
- elasticsearch - KIBANA 和 ELASTICSEARCH 配置 CA
- html - 响应式进度条垂直对齐
- chef-infra - 如何在测试厨房的节点上启用特定的 Ohai 插件
- mysql - 检查日期可用性的子查询
- c++ - 使用 Conan 直接从 GitHub 安装包
- omnet++ - 如何将 'const omnetpp::SimTime' 转换为 'double'
- dialogflow-es - 在荷兰测试 Actions on Google Transaction API 时出现“抱歉,我无法在您所在地区收款”消息
- aurelia - 在转发器中使用 @computedFrom 数组
- r - 具有灵活函数参数的复杂 if else 函数的代码改进
- c# - .NET Framework 依赖树