相关疑难解决方法(0)

在C中使用布尔值

C没有任何内置布尔类型.在C中使用它们的最佳方法是什么?

c boolean

659
推荐指数
10
解决办法
127万
查看次数

C中枚举的大小是多少?

我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?

c enums

138
推荐指数
3
解决办法
17万
查看次数

如何设置int范围之外的枚举常量的值?

C99标准要求用于定义枚举常量值的表达式具有可表示为的值int.

在C99标准第6.7.2.2节第2 节中:

定义枚举常量值的表达式应为整数常量表达式,其值可表示为int.

但是,枚举类型可以由实现定义为与任何整数类型兼容,包括那些值范围之外的整数类型int.

在C99标准第6.7.2.2节第2 节中:

每个枚举类型应与char有符号整数类型或无符号整数类型兼容.

这意味着虽然您无法在a的范围之外显式设置枚举常量int的值,但是int如果实现将枚举类型与具有范围的整数类型兼容,则枚举常量的值可以在a的范围之外.在...之外int.


现在我知道一种方法来获取int枚举常量的set 范围之外的特定值:虚拟枚举器.

enum hack{
    DUMMY0 = INT_MAX,
    DUMMY1,
    /* supply as many more dummy enumerators as needed */
    ...
    /* declare desired enumerator */
    FOOBAR
};
Run Code Online (Sandbox Code Playgroud)

这要归功于C99标准第6.7.2.2节第3段:

枚举器=将其枚举常量定义为常量表达式的值.
...
每个后续的枚举器都没有= 将其枚举常量定义为通过将1添加到前一个枚举常量的值而获得的常量表达式的值.

不幸的是,这仅适用于大于的正值INT_MAX,因为每个后续枚举器的值只会递增.另一个需要注意的是,需要创建可能的许多虚拟枚举器,以获取所需的特定枚举器.


这导致以下问题:

  1. 有没有办法将枚举常量的值设置为超出范围的负值int? …

c enums enumeration c99 language-lawyer

8
推荐指数
1
解决办法
4728
查看次数

如何使用 GCC 强制枚举大小?

为了确保与我正在开发的产品的二进制兼容性,我需要强制我的一些枚举由单个字节表示。

由于 C90 允许编译器选择适当的类型(6.7.2.2 枚举说明符),因此我想强制编译器选择 8 位。

我确实希望 GCC 属性允许这样做,但我在这里找不到任何东西。还有其他方法可以处理这个问题吗?(或者我错过的属性)

我正在为 Microblaze 和 C90 使用 GCC 4.6.4(我在这里也没有看到相关选项)。

c enums gcc microblaze

5
推荐指数
0
解决办法
1987
查看次数

我可以假设sizeof(uint8_t)= 1吗?

我有一个程序,它使用uint8_t数组的动态分配; 我可以安全地假设它的长度总是一个字节吗?

c sizeof uint uint8t

2
推荐指数
1
解决办法
3568
查看次数

标签 统计

c ×5

enums ×3

boolean ×1

c99 ×1

enumeration ×1

gcc ×1

language-lawyer ×1

microblaze ×1

sizeof ×1

uint ×1

uint8t ×1