0
我试图给结构中的位字段赋值。这是一个降级,因为分配的变量的尺寸小于右侧所用的类型。有没有办法强制转型,理解降级会有一些风险。这是测试代码,我不指望右手的值比我的位字段可以做的更大。类型转换为位字段
编译使用:
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;
当你尝试'typedef unsigned long long uint64_t;''时会发生什么? –
与以前相同的输出。 sizeof(uint64_t)为我的测试代码返回8。 –
那么,直到我从'无符号长'MSVC报告'的错误C2034:'val':比特字段的类型太小的位数“更改。更改后,一个干净的编译(除了空的'{}'初始化程序)。 –