在C中,你有一个128位的位域

以下代码是否合法?

struct BigInt { uint64_t a : 128; }; 

一个位域必须适合单个int ,所以你运气不好,除非你的平台上的int是128位。

(你也错过了一个;在编辑之前的struct的末尾。)

在标准C11中不合法(在大多数平台上;原则上, int可能是128位,但我从未遇到过具有该function的平台)。 阅读n1570 (草案规范)。

但在某些平台上,最近的编译器(例如GCC 6)提供了__int128作为扩展 。 你不会将它用作位域,而是作为某种整数类型。

另请参阅相关问题的答案。