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':比特字段的類型太小的位數「更改。更改後,一個乾淨的編譯(除了空的'{}'初始化程序)。 –