gpt4 book ai didi

c - 类型转换为位字段

转载 作者:行者123 更新时间:2023-11-30 17:02:15 25 4
gpt4 key购买 nike

我正在尝试为结构中的位字段分配一个值。这是降级,因为分配的变量的大小比右侧使用的类型小。有没有办法强制对其进行定型,了解降级存在一些风险。这是测试代码,我不希望右手值大于我的位字段可以接受的值。

编译使用:

    gcc -Wconversion compileError.c

代码:

#include "stdio.h"

typedef unsigned long int uint64_t;
typedef unsigned short int uint16_t;

typedef struct
{
uint64_t val:48;
uint16_t length;
}data_t;

static data_t testData[10] = {};

int main()
{
data_t* pData = (data_t*)&testData;
uint64_t var = 0;

pData->val = var + 1;

printf("Just trying to compile this program\n");
return 0;
}

编译器输出:

compileError.c: In function main:
compileError.c:19:22: warning: conversion to long unsigned
int:48 from uint64_t may alter its value [-Wconversion]
pData->val = var + 1;

最佳答案

这个blog展示了如何暂时消除该警告。

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
pData->val = var + 1;
#pragma GCC diagnostic pop

有一个开放的 GCC 增强请求来解决这个问题,并且有一个 comment显示使用屏蔽的解决方法。

pData-> val = (var + 1) & 0xffffffffffffLU

关于c - 类型转换为位字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com