gpt4 book ai didi

c - C 中静态枚举的用法

转载 作者:行者123 更新时间:2023-11-30 18:30:58 24 4
gpt4 key购买 nike

我已经搜索了 c 中枚举的静态用法,然后我在这里发布这个主题。我是一名测试人员,我需要通过编写一个简单的程序来测试本地、静态、全局范围的枚举数据类型。

一个简单的静态变量可以很容易地测试,同样我需要测试静态枚举数据类型。

我写了一个简单的代码。需要你们的帮助。

#include<stdio.h>

enum day {sun=1,mon,tue,wed,thur,fri,sat};
static enum direction {UP,DOWN,RIGHT,LEFT};

int static_enum()
{
static enum direction dir = UP;
printf("dir = %d\n",dir);
dir++;
}


int main()
{
printf("\nsun = %d mon = %d tue = %d wed = %d thurs = %d fri = %d sat = %d\n",sun,mon,tue,wed,thur,fri,sat);
enum day fri = 25;
// now friday gets modified from 21 to 25 becasue we have re-assigned the value
printf("\nfri = %d\n",fri);
// now saturday will still have value 22
printf("\nsat = %d\n",sat);
printf("\n");
static_enum();
static_enum();
return 0;
}

让我知道代码是否测试枚举数据类型的静态功能。谢谢您

注意:我搜索的主题让我选择了 C# 或 Java。

最佳答案

静态存储类与对象的链接和存储相关。它实际上与对象的类型没有任何关系。

下面是(我认为)你的程序正在做什么的解释:

<小时/>
enum day {sun=1,mon,tue,wed,thur,fri,sat};

这声明了一个带有标签名称 day 的枚举类型,并且还定义了一些枚举常量及其值。

static enum direction {UP,DOWN,RIGHT,LEFT};

这声明了一个带有标签名称 direction 的枚举类型,并且还定义了一些枚举常量及其值。

static 存储类在这里毫无意义,因为您没有为对象定义(分配存储)。

int static_enum()
{
static enum direction dir = UP;
printf("dir = %d\n",dir);
dir++;
}

这定义了一个名为 dir 的 block 范围对象类型 enum directionstatic 存储类意味着该对象将在程序启动时分配和初始化,并且它将在函数调用之间保留其最后存储的值。

int main()
{
printf("\nsun = %d mon = %d tue = %d wed = %d thurs = %d fri = %d sat = %d\n",sun,mon,tue,wed,thur,fri,sat);

这将输出枚举常量的值。

enum day fri = 25;

这定义了一个名为 fri 的 block 范围对象类型 enum day ,初始化为值 25 。枚举常量也命名为 fri在此 block 中将不再可见(除非您重新声明 enum day )。

// now friday gets modified from 21 to 25 becasue we have re-assigned the value
printf("\nfri = %d\n",fri);

这会输出对象的值 fri不是枚举常量的值 fri 。没有任何修改。

// now saturday will still have value 22
printf("\nsat = %d\n",sat);

这输出枚举常量 sat 的值,正如预期的那样。

printf("\n"); 
static_enum();
static_enum();
return 0;
}
<小时/>

有人可能想知道为什么该语言允许 static 存储类位于 undefined object (为其分配存储)的声明中。我认为这只是一种语法上的便利,因为声明和定义共享相同的语法。 C 语法允许您堆积任意数量的存储类类型说明符类型限定符函数说明符对齐说明符 在声明中的顺序任意。然而,根据 C 标准的各个语义部分,许多组合是不允许的或导致未定义的行为。我不认为有什么可以禁止无意义的事情 static direction 声明中的关键字.

关于c - C 中静态枚举的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518540/

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